我想通過AJAX獲取嵌套表單提交,但我似乎無法弄清楚。我一直在尋找解決辦法,但都是徒勞的。我在這裏看到了一些類似的問題,但沒有一個有幫助的答案。我有我的application.html.erb佈局,所有寶石等所有必要的內含物。使用Rails 3.1.1和Ruby 1.9.2p290。Rails ajax表單返回缺少模板
下面是我的模型......
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
最後我創造。 js.erb文件在views/children文件夾中(這只是爲了測試)...
$("#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框架幕後的情況。
另一個可能或可能不相關的注意事項,我注意到當我展示它們時,我的一些jQuery無法在隱藏div中的元素上工作。例如,我正在處理的這個表單是通過顯示一個隱藏的div來呈現的,而且好像我必須重新編寫partial中的一些按鈕腳本,因爲我在應用程序中包含的腳本.js文件在這些按鈕上不起作用,就像其他按鈕一樣。
但是,我不認爲這是問題,因爲我把表單直接放在視圖中(未隱藏),但它仍然不起作用。
編輯
現在我已經注意到,方式是通過HTML提交,而不是JS。因此,出於某種原因,Rails jQuery沒有綁定到表單並覆蓋默認的提交操作。可能是什麼原因造成的?
編輯
經過進一步研究,我懷疑,這個問題有事情做的事實,我使用的是從的ThemeRoller定製的jQuery文件。有什麼我應該做的,以確保我的自定義jQuery不會干擾內置的Rails jQuery?
任何想法??
你爲我節省了很多時間! :) 謝謝!!! – Alejandra