我从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