Ruby on rails 当父类型更改时删除子项

Ruby on rails 当父类型更改时删除子项,ruby-on-rails,rails-activerecord,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

我有以下代码:

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
class FlexField
目标是在类型不是列表的情况下删除所有值。现在发生的事情是,只要我将类型设置为除list之外的其他类型,就不会删除任何子项,但它们的flex_field_id会设置为null

我如何才能真正删除它们?

您可以这样写:

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
class FlexField
关于以下方面的简要想法:

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


很好用!谢谢我会尽快接受你的答复。