父类型更改时删除子项

时间:2015-05-25 13:58:48

标签: ruby-on-rails rails-activerecord

我有这段代码:

class FlexField < ActiveRecord::Base
  has_many :flex_field_values, class_name: 'FlexFieldValue'
  after_save :delete_flex_values

  def delete_flex_values
    if self.field_type != 'list'
      self.flex_field_values.delete_all
    end
  end

如果类型不是列表,则目标是删除所有值。现在发生的事情是,只要我将类型设置为list以外的类型,就不会删除任何子项,但是flex_field_id会被设置为null。

我怎样才能真正删除它们?

1 个答案:

答案 0 :(得分:1)

你可以写成:

class FlexField < ActiveRecord::Base
  has_many :flex_field_values, class_name: 'FlexFieldValue', dependent: :destroy
  after_save :delete_flex_values

  def delete_flex_values
    if self.field_type != 'list'
      self.flex_field_values.clear
    end
  end
end

关于collection.clear的简要说明:

  

从集合中删除每个对象。如果关联对象与依赖::: destroy相关联,则会销毁它们,如果依赖于:: delete_all,则直接从数据库中删除它们,否则将其外键设置为NULL。如果:through选项为true,则不会在连接模型上调用destroy回调。直接删除连接模型。