我從RailsCasts嵌套模型表單第2部分示例創建了一個嵌套模型,並讓它與Rails 3和JQuery一起工作。目前,用戶可以創建一個新項目,然後單擊一個鏈接添加新任務,並且在每個新任務中,單擊一個允許他們爲每個任務添加新任務的鏈接。下面是創建一個新任務的鏈接(該鏈接以創建新的任務是相似的):使用'link_to_add_fields helper'自動生成嵌套模型表單
<p><%= link_to_add_fields "Add task", f, :task %></p>
引用該助手:
def link_to_add_fields(name, f, association)
new_object = f.object.class.reflect_on_association(association).klass.new
fields = f.fields_for(association, new_object, :child_index => "new_#{association}") do |builder|
render(association.to_s.singularize + "_fields", :f => builder)
end
link_to_function(name, h("add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\")"))end
它的工作原理是這樣的:通過點擊該鏈接,HTML通過JQuery添加,顯示任務名稱的表單字段以及允許用戶向任務添加新分配的鏈接。
我想要做的是將任務表單顯示在任務名稱字段旁邊 - 以便用戶無需單擊其他鏈接即可爲每個任務添加新任務。我能做到這一點時,通過項目控制器的第一次加載頁面:
1.times do
task = @product.tasks.build
1.times { task.assignments.build}
end
然而,由於IM使用jQuery添加和刪除HTML,控制器將不會被調用,「當表將不建增加'新任務。
當創建新任務字段時,是否有辦法自動(從任務部分內)「構建」嵌套賦值字段?
這裏是我的部分原因是當用戶單擊形式的「新任務」鏈接創建任務形式:
<div class = "fields">
<%= f.label :name, "Task name"%>
<%= link_to_remove_fields "remove", f %><br />
<%= f.text_field :name %>
<% f.fields_for :assignments do |builder| %>
<%= render 'assignment_fields', :f => builder %>
<% end %>
<p><%= link_to_add_fields "Add assignments", f, :assignments %></p>
不知道如果你還在尋找一個答案,但已經有修訂railscast這個http://railscasts.com/episodes/196-nested-model-form-revised – spullen 2013-03-26 16:56:57
我還建議使用[cocoon](https://github.com/nathanvda/cocoon)gem來處理嵌套的表單部分。 – spullen 2013-03-26 16:57:48