通过很多迭代测试,我只注意到,表示两个模型之间的HABTM关系的连接表在删除这些模型的实例时不会删除条目。删除具有HABTM关系的模型的实例时,是否需要做一些特殊的事情?如何从rails的HABTM连接表中删除条目?
4
A
回答
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? }
0
在连接表中的条目应该得到没有你做什么特别的删除。如果您有奇怪的情况,您可以将:delete_sql
选项添加到您的代码中以更改行为。删除连接另一端的对象不是默认行为。
相关问题
- 1. 从HABTM连接表中删除单行
- 2. 如何使用JPQL从连接表中删除条目?
- 3. 如何执行从完整外连接中删除表条目?
- 4. 如何从sip_regisration表中删除条目?
- 5. 从HABTM表删除关联
- 6. 如何删除记录从连接表
- 7. 从连接中删除重复的条目
- 8. SQL查询:删除连接表中不存在的条目?
- 9. 如何删除连接表中的行?
- 10. 如何从Eclipse ColorRegistry中删除条目?
- 11. 从连接到服务器对话框中删除条目
- 12. 删除habtm关系中的许多重复条目之一?
- 13. 从关联表中删除条目
- 14. JPA - 从参考表中删除条目
- 15. SML:从列表中删除条目
- 16. 如何从SQL中的表连接中删除重复项
- 17. HABTM连接表具有HABTM关系
- 18. Hibernate Envers:如何从我的审计表中删除条目?
- 19. 当满足条件时从连接表中删除记录
- 20. 问题的HABTM和连接表中的Rails
- 21. 如何从Perl中的链接列表中删除项目?
- 22. 从链接列表中删除项目
- 23. rails 3 habtm只删除关联
- 24. Rails:没有正确删除HABTM记录
- 25. HABTM连接表验证
- 26. 如何从数组列表中删除重复条目
- 27. 如何从Windows注册表中删除JRE条目?
- 28. 如何从Azure功能中删除Azure表存储条目?
- 29. 如何从列表中删除项目
- 30. 如何删除Firebase中的条目
因此,如果我必须“FooBar.all.each {| fb | fb.destroy?if fb.foo.nil?|| fb.bar.nil?}有一点指向”dependent =>:destroy“ “ 无论如何? – James 2009-12-17 07:28:22
做的“依赖=>:摧毁”甚至做任何事情?它似乎并不如此。我需要执行销毁还是其他? – James 2009-12-17 07:29:15
'FooBar.all.each {...}'只是为了摆脱连接表中的孤立记录。在移动到has \ _many之后:尽管与连接模型关联的关系标记为:dependent =>:destroy,但如果删除它们所属的记录,则不会在连接表中孤立记录。添加:依赖=>:销毁选项将销毁所有与你正在销毁的相关记录。但是,它不会触发删除。你应该阅读关于ActiveRecord :: Base#destroy,ActiveRecord :: Base#delete和ActiveRecord :: Associations :: ClassMethods的文档。 – EmFi 2009-12-17 07:55:38