通过测试的多次迭代,我只注意到我的连接表,表示两个模型之间的关系HABTM没有删除条目时,这些模型的实例被删除。我需要做一些特别的东西卸下带有HABTM关系的模型的实例时?

有帮助吗?

解决方案

经仔细检查HABTM关系应当除去加入表条目。然而无论HABTM关系或我在原始版本中描述的关联(看帖子历史)这种解决方案会删除这些连接表项,当你消除与delete方法记录。 ActiveRecord::Base#delete不会触发任何回调,如那些一HABTM关系,建立了从连接表中删除孤立的条目。相反,你应该使用ActiveRecord::Base#destroy

您将不得不使用原始SQL删除不需要的项。如果你决定创建一个连接模式,您可以通过在模型中加入重复的条目,删除那些没有关联。

示例:

class Foo < ActiveRecord::Base
  has_many :foo_bars, :dependent => :destroy
  has_many :bars, :through => :foo_bars
end

class FooBar < ActiveRecord::Base
  belongs_to :foo
  belongs_to :bar
end

class Bar < ActiveRecord::Base
  has_many :foo_bars, :dependent => :destroy
  has_many :foos, :through => :foo_bars
end

FooBar.all.each{|fb| fb.destroy? if fb.foo.nil? || fb.bar.nil? }

其他提示

在连接表中的条目应该没有你做什么特别的被越来越删除。您可以将:delete_sql选项添加到您的代码去改变,如果你有一个奇怪的局面。删除对象上的连接对方不是默认行为。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top