如何从rails中的HABTM连接表中删除条目?

Jam*_*mes 6 mysql ruby-on-rails has-and-belongs-to-many relationships dependent-destroy

通过多次迭代测试,我只注意到我的连接表代表了两个模型之间的HABTM关系,当删除这些模型的实例时,它不会删除条目.删除具有HABTM关系的模型实例时,是否需要执行一些特殊操作?

EmF*_*mFi 7

仔细检查后,HABTM关系应该删除连接表条目.但是,当您使用该delete方法消除记录时,此解决方案的HABTM关系或我在原始版本中描述的关系(请参阅帖子历史记录)都不会删除这些连接表条目.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? }
Run Code Online (Sandbox Code Playgroud)