在Rails 3.2.x中,以下方法工作正常:
class Engine < ActiveRecord::Base
has_one :car, dependent: :destroy
end
class Car < ActiveRecord::Base
belongs_to :engine, dependent: :destroy
belongs_to :owner
end
class Owner < ActiveRecord::Base
has_one :car, dependent: :destroy
end
如果我打电话给owner.destroy
,它会删除那个车主,它的车和那辆车的引擎。我升级到 Rails 4,不幸的是我在发动机和汽车之间得到了一个无休止的循环。我假设是因为当汽车试图被删除时,Rails 首先会删除它的引擎。然后,当尝试删除发动机时,Rails首先尝试删除其汽车。
如何在 Rails 4 中处理这个问题?我希望能够删除车主,Rails/ActiveRecord 会自动删除关联的汽车和发动机。或者我可以删除发动机,Rails 会自动删除关联的汽车,反之亦然。
你应该使用inverse_of
而不是dependent
http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html
http://apidock.com/rails/ActiveRecord/Associations/ClassMethods/belongs_to
这可能会对您有所帮助。