編集:
以下の有益なコメントに加えて、SteveSchwartzによる2つの優れた記事がすべてを明確に説明しています。
- http://www.alfajango.com/blog/rails-3-remote-links-and-forms/
- http://www.alfajango.com/blog/rails-3-remote-links-and-forms-data-type-with-jquery/
Rails 3.2.2 / jquery-rails 2.0.1 (jquery 1.7.1を使用)
フォームにファイルアップロードフィールドを追加するためのAJAXリクエストを送信するリンクがあります。 ページ関連のすべてが正しく機能します。新しいフォームフィールドのHTMLフラグメントがサーバーから取得され、フォーム内のdivに追加されます。
でも、
サーバーは2つのGET要求を受信します。1つはAJAXリクエストです。もう1つは、「通常の」アンカー要素GETのようです。「通常の」GETはRailsUJSによって停止されると思いました。
通常のリンクアクションを自分で無効にする必要がありますか?誰かが私が誤解していることと、代わりに[2番目の要求を防ぐために]何をすべきかを説明してもらえますか?
私はこの質問を見ました:Rails 3 UJS-コントローラーはlink_to:remoteによって2回呼び出されます。そこで、アセットパイプラインのコンパイルを変更してみconfig.assets.debug = false
ましたが、効果がありませんでした。さらに、これはダブルAJAX GETリクエストではないので、別の問題だと思います。
助けてくれてありがとう!
サーバーログスニペット:
Started GET "/files/new?asset_number=2" for 127.0.0.1 at 2012-03-23 15:23:27 +0100
Started GET "/files/new" for 127.0.0.1 at 2012-03-23 15:23:27 +0100
ブラウザのHTML:
<a href="/files/new" data-remote="true" id="add_another_file" position="after" update="files">Add another file</a>
意見:
<%= link_to 'Add another file', new_file_path, :remote => true,
:update => 'files',
:position => 'after',
:id => 'add_another_file' %>
コントローラーのコーヒースクリプト:
$( ->
$('a#add_another_file').click( ->
url = '/files/new?asset_number=' + $('#files input').length
$.get(url, ((data) -> $('#files').append(data)), 'html')))