Rails:nested_form gem remove不工作但添加工作

时间:2013-03-27 08:14:30

标签: ruby-on-rails-3 ruby-on-rails-3.2 nested-forms nested-attributes

我的问题与问题nested_form gem add works but remove fails...why?有些相似。

我有一个产品编辑页面,其中产品的子类别在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

在产品编辑视图中:

 <%= 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 %>

代码适用于添加子类别。但是当我删除子类别时失败了。记录给出:

 "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)

虽然,我点击删除,它只是传递_destroy =&#34; 1&#34;,但不会破坏子类别。

有人能告诉解决方案吗?

更新

非常抱歉我的愚蠢错误。我没有看到正确的代码。在我复制的模型中

accepts_nested_attributes_for :product_sub_categories

没有:allow_destroy =&gt;真正。当我删除它时,代码工作正常。

1 个答案:

答案 0 :(得分:0)

您需要在关联旁边添加dependent destroy子句,它会破坏产品的子类别。

has_many   :product_sub_categories, :dependent => :destroy