在destroy上取消根类的所有继承者

时间:2013-12-12 20:02:19

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord sti

鉴于以下内容:

class Foo < ActiveRecord::Base; end
class Bar < Foo; end
class Baz < Foo; end

当删除Bar的课程时,是否有“Rails'y”方法可以取消所有Bazhas_many :foos的外键?这似乎不起作用:

class Quux < ActiveRecord::Base
  has_many :foos, dependent: :nullify
end

我意识到我可以在before / after_destroy回调中执行此操作,但我想知道是否有更规范的方法来执行此操作。谢谢!

更新

我目前的解决方案:

class Quux < ActiveRecord::Base
  after_destroy :nullify_foos

  private

  def nullify_foos
    Foo.where(quux_id: id).update_all(quux_id: nil)
  end
end

# (results in two queries?)
class Quux < ActiveRecord::Base
  has_many :bars, dependent: :nullify
  has_many :bazs, dependent: :nullify
end

1 个答案:

答案 0 :(得分:0)

我相信你在has_many协会中的意思是:dependent => :destroy

has_many :foos, dependent: :destroy

这最终可能会在后端调用:nullify,但只有在实际删除数据行时才会这样做。

在此引用:http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html