1

ネストされたフォームを取得して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に干渉しないようにするためにすべきことはありますか?

何かご意見は??

4

1 に答える 1

1

あはは!!! したがって、jQueryライブラリを2回インクルードしていたことがわかり、間違った順序で想定しています。ThemeRollerからカスタムjQueryテーマをダウンロードし、application.html.erbファイルにGoogleCDNへのリンクがありました。そこで、アプリケーションヘッダーのGoogle CDNへの参照を削除し、カスタムjQueryファイルを参照するためにapplication.jsファイルに「//=require」行をいくつか含めました。

//= require jquery-1.8.2
//= require jquery-1.8.24.custom.js
//= require jquery-ui
//= require jquery_ujs
//= require_tree .

これで競合は解決したようですが、RailsAJAX呼び出しは正常に機能しています。

于 2012-10-26T04:18:12.263 に答える