ネストされたフォームを取得してAJAX経由で送信しようとしていますが、理解できないようです。私は解決策を広範囲に探しましたが、すべて無駄でした。私はここでいくつかの同様の質問を見てきましたが、役立つ答えはありません。application.html.erbレイアウト、すべてのgemなどに必要なすべてのインクルードがあります。Rails3.1.1とRuby1.9.2p290を使用します。
以下は私のモデルです...
class Parent < ActiveRecord::Base
has_many :children, :dependent => :destroy
accepts_nested_attributes_for :children
end
class Child < ActiveRecord::Base
belongs_to :parent
end
そして、これが私のフォームです...
<%= form_for @parent.children.new, :remote => true do |t| %>
# form fields...
<%= t.submit 'Save', :class => 'button close_modal', :id => 'submit_button' %>
私の子供のコントローラー...
respond_to :html, :js, :json
def create
@child = Parent.create(params[:child])
respond_with(@child.parent)
end
そして最後に、views / childrenフォルダーにある私のcreate.js.erbファイル(これはテスト用です)...
$("#notice").html('this works')
上記のすべてがうまくいかなかったとき、私はこのスクリプトをフォームに追加してみました...
jQuery.ajaxSetup({
'beforeSend': function(xhr) {xhr.setRequestHeader("Accept", "text/javascript")}
});
$("#submit_button").submit(function(){
$.post($(this).attr("action"), $(this).serialize(), null, "script");
return false;
})
しかし、それでも運はありません。ここに表示したコードは、子コントローラーを介してフォームを送信し、子フォームがある親/表示ビューにリダイレクトします。しかし、子コントローラーから「responds_with(@ child.parent)」を削除すると、次のエラーが発生します...
Template is missing
Missing template children/create, application/create with
{:handlers=>[:erb, :builder, :coffee], :formats=>[:html], :locale=>[:en, :en]}.
Searched in: * "C:/Users/Owner/My Documents/Aptana Studio 3 Workspace/my_app/app/views"
* "c:/Ruby192/lib/ruby/gems/1.9.1/gems/devise-1.5.2/app/views"
したがって、どちらの場合も、フォームはAJAX経由で送信されていないと思います。そして、その理由はわかりません。私はRailsとプログラミング全般に少し慣れていないので、Railsフレームワークの舞台裏で何が起こっているのかについてはよくわかりません。
関連する場合と関連しない場合があるもう1つの注意点として、非表示のdivの要素を表示すると、一部のjQueryが機能しないことに気付きました。たとえば、私が取り組んでいるこのフォームは、非表示のdivを表示することでjQueryを介してレンダリングされます。アプリケーションにスクリプトを含めたため、ボタンスクリプトの一部を部分的に書き直す必要があるようです。 .jsファイルは、他のボタンのようにこれらのボタンでは機能しません。
ただし、フォームを真っ直ぐに(非表示に)表示したので、それは問題ではないと思いますが、それでも機能しませんでした。
編集
フォームがJSではなくHTML経由で送信されていることに気づきました。そのため、何らかの理由で、Rails jQueryはフォームにバインドされておらず、デフォルトの送信アクションをオーバーライドしていません。何が原因でしょうか?
編集
さらに調査した結果、この問題は、ThemeRollerのカスタムjQueryファイルを使用しているという事実に関係しているのではないかと疑っています。カスタムjQueryが組み込みのRailsjQueryに干渉しないようにするためにすべきことはありますか?
何かご意見は??