在编辑操作中复制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"%>