鉴于以下内容:
class Foo < ActiveRecord::Base; end
class Bar < Foo; end
class Baz < Foo; end
当删除Bar
的课程时,是否有“Rails'y”方法可以取消所有Baz
和has_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
答案 0 :(得分:0)
我相信你在has_many协会中的意思是:dependent => :destroy
。
has_many :foos, dependent: :destroy
这最终可能会在后端调用:nullify
,但只有在实际删除数据行时才会这样做。
在此引用:http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html