2012-10-23 65 views
1

我想通過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?

任何想法??

回答

1

啊哈!!!所以事實證明,我包含了兩次jQuery庫,並且我假設的順序是錯誤的。我從ThemeRoller下載了一個自定義的jQuery主題,並且在我的application.html.erb文件中有一個指向Google CDN的鏈接。所以我刪除了在我的應用程序頭文件中對Google CDN的引用,然後在我的application.js文件中包含了一些「// = require」行來引用我的自定義jQuery文件。

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

這似乎已經解決了衝突,現在我的Rails AJAX調用正在工作只是丹迪!

+0

你爲我節省了很多時間! :) 謝謝!!! – Alejandra