use*_*724 6 nested-forms nested-attributes ruby-on-rails-3 ruby-on-rails-3.2
我的问题有点类似于问题nested_form gem add works但删除失败...为什么?.
我有一个产品编辑页面,其中产品的子类别在product_sub_categories中链接.要将子类别分配给产品,我使用了product_sub_categories的嵌套属性.因此,产品可以有多个sub_categories.
在产品型号中,
has_many :product_sub_categories
has_many :sub_categories, :through => :product_sub_categories
accepts_nested_attributes_for :product_sub_categories, :allow_destroy => true
Run Code Online (Sandbox Code Playgroud)
并在产品编辑视图中:
<%= f.fields_for :product_sub_categories do |product_sub_category| %>
<%= product_sub_category.collection_select :sub_category_id, @sub_categories, :id, :sub_category, {:include_blank => 'Select a Sub Category'} %>
<%= product_sub_category.link_to_remove "Remove", :class => "subcatlink" %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
代码适用于添加子类别.但是当我删除子类别时失败了.日志给出:
"product_sub_categories_attributes"=>{"0"=>{"sub_category_id"=>"1", "_destroy"=>"false", "id"=>"9"}, "1"=>{"sub_category_id"=>"1", "_destroy"=>"1", "id"=>"17"}},
ProductSubCategory Load (0.2ms)[0m [1mSELECT `product_sub_categories`.* FROM `product_sub_categories` WHERE `product_sub_categories`.`product_id` = 8 AND `product_sub_categories`.`id` IN (9, 17)
Run Code Online (Sandbox Code Playgroud)
虽然,我点击删除,它只是传递_destroy ="1",但不会破坏子类别.
任何人都可以告诉解决方案吗?
更新:
非常抱歉我的愚蠢错误.我没有看到正确的代码.在我复制的模型中
accepts_nested_attributes_for :product_sub_categories
Run Code Online (Sandbox Code Playgroud)
没有:allow_destroy => true.当我删除它,代码工作正常.
您需要dependent destroy
在关联旁边添加子句,这会破坏产品的子类别。
has_many :product_sub_categories, :dependent => :destroy
Run Code Online (Sandbox Code Playgroud)