我在rails应用程序中使用嵌套表单,我有一个简单的父子设置:
型号:
class Experiment < ActiveRecord::Base
has_many :exptypes, :dependent => :destroy
accepts_nested_attributes_for :exptypes, :allow_destroy => true
class Exptype < ActiveRecord::Base
belongs_to :experiment
查看:
父:
<%= nested_form_for(@experiment) do |f| %>
<%= f.fields_for :exptypes do |builder| %>
<%= render 'exptype_fields', :f => builder %>
<% end %>
<p><%= f.link_to_add "Add an Experimental Type", :exptypes %></p>
子:
<h2>Experiment type</h2>
<p>
<div class="field">
<%= f.link_to_remove "Remove this Experiment" %>
</div>
<div class="field">
<%= f.label :type_name %><br>
<%= f.text_field :type_name %>
</div>
</p>
添加许多孩子工作正常,但当我尝试从列表中删除任何内容时(通过单击link_to_remove
创建的按钮),嵌套表单消失,但是当我点击更新时,显示表单仍然显示“已删除”的孩子。
答案 0 :(得分:5)
发现错误,我的控制器中的允许参数中没有:_destroy
。
希望这有助于其他人!
编辑:
我的控制器的强params方法如下所示:
def experiment_params
params.require(:experiment).permit(:_destroy, :experiment_number, :date, :title, :pi,
:biocontrol_run_num, :goals, :description, :str, :exp_type)
end