リモートで実行されたアクションに問題があり、リンクを初めてクリックしたときに更新されない部分があります。ビュー内パーシャルが最初のクリックで更新されない
(部分books
という名前)、私はリンクを作成しています。また、その本が読まれたときに別のテキストを表示する条件がある routes.rbをで定義されている
link_to "⊗", read_book_path(book), :remote => true
read_book_path
を。
が私のコントローラの内部では、私は新しいアクションを定義しています
def read
@books = Book.all
@book = Book.find(params[:id])
@book.read = [email protected]
@book.save
respond_to do |format|
format.html { redirect_to(books_url) }
format.js {render :layout => false, :locals => { :book => @book } }
end
end
は、これは私がファイルread.js.erb
を必要があることを意味し、このファイルの内容は次のとおりです。
$("#books").empty().html("<%= escape_javascript(render(:partial => "books")) %>");
私はリンクをクリックすると、私ができますターミナルウィンドウでデータベースフィールドが更新されているが部分的に更新されていないことを確認してください。同じリンクを再度クリックすると、部分的に更新されます。
リンクを:remote => false
に変更することもできますが、ページは(期待通りに)リロードされます。
Safariとデベロッパーツールでデバッグしようとしましたが、初めてリンクをクリックしたときにサーバーの応答を見ることができます。 何か問題があります。<%= escape_javascript(render(:partial => "books")) %>
によって生成されたHTMLには、部分的な内容の古い内容の間違ったHTMLが含まれています。 2回目または3回目のクリックだけが更新されたHTMLを表示します。
私はjquery-ujsを統合しました。これは、最初に部分的に更新されないか、他に何か不足しているという理由ですか?
これは本当に私に頭痛を与えました、あなたは私を助けることができますか?
編集: これが役立つ場合:application.js内のリスナーをajax:before
とajax:complete
に作成しました。最初のものは少しスピナーを示し、2番目のものはそれを隠しています。 リンクをクリックするとスピナーが表示されますが、非表示にはなりません。
ありがとうございます。注文を変更すると私の問題が解決しました。 :) 私がしようとしているのは、何らかのスイッチです。「読んだ」本をクリックすると、「未読」とマークされ、逆も同様です。 したがって、私は現在の値を読み込み、反転して元に戻しています。私はより良い方法を見つけることができませんでした。 – dmnkhhn