在编辑操作中复制f.fields_for
Controller: projects_controller.rb
def new @project = Project.new @project.repositories.build end def edit @project = Project.find(params[:id]) end
型号: project_sub_type.rb
class ProjectSubType :destroy accepts_nested_attributes_for :repositories end
查看: _form.html.erb
{:class => 'project'} do |f| %> Svn Software Git Software
edit.html.erb
Edit project
问题:在创建期间,它会创建这样的复选框
它对我来说非常适合。 但在编辑期间,它会额外创建2个字段:
并创建一个隐藏字段如下:
to .. 3
有人可以指出我的错误。 如果我使用1个fields_for并通过数组循环,则存在同样的问题。
谁能请帮忙。
提前致谢
参考http://apidock.com/rails/v3.2.13/ActionView/Helpers/FormHelper/fields_for
您的代码将导致重复结果,因为The block given to the nested fields_for call will be repeated for each instance in the collection
,因此您必须:
<%= form_for @project, :html => {:class => 'project'} do |f| %> <%= f.label :name, "Project name" %> <%= f.text_field :name %> <% @project.repositories.each do |r| %> <%= f.fields_for :repositories, r do |ff| %> <%= ff.check_box :repos_name, {} , r.repos_name, true %><%=r.repos_name%> <% end %> <% end %> <%= f.submit "Save"%>
但是在创建时,您应该填写check_box不包含在存储库中。 所以你可以:
<%= form_for @project, :html => {:class => 'project'} do |f| %> <%= f.label :name, "Project name" %> <%= f.text_field :name %> <% @project.repositories.each do |r| %> <%= f.fields_for :repositories, r do |ff| %> <%= ff.check_box :repos_name, {} , r.repos_name, true %><%=r.repos_name%> <% end %> <% end %> <% (['svn_software','git_software'] - @project.repositories.map(& :repos_name)).each do |name| %> <%= ff.check_box :repos_name, {} , name, nil %><%=name%> <% end %> <%= f.submit "Save"%>