在 Rails 应用程序中,我在 MySQL 中有外键约束,我将它们全部手动设置,与我的迁移分开。
我想弄清楚我是否应该使用 ActiveRecord:dependent => :destroy
选项。例如,在我的架构中我有表......
users
-----
log_entries
-----------
user_id # Has FK constraint to users.id with ON DELETE CASCADE
在我的模型中我可以......
class User < ActiveRecord::Base
has_many :log_entries, :dependent => :destroy
end
我是否应该忽略模型的依赖选项并将其留给数据库?或者把它放在那里很好吗?删除此应用程序中的内容时,我不需要运行任何回调。在所有情况下,只需删除它们就可以了。
另一个需要考虑的因素是 FK 约束不会出现在我的测试环境中,可能是因为rake db:test:prepare
没有设置它们。因此,如果我完全依赖 MySQL 进行级联删除,则很难测试会发生什么。
如果您的 FK 带有 ON DELETE CASCADE,则不应在模型中使用 dependent => :destroy。它可以运行不必要的查询,并且您不能指望它将来不会破坏事情。您应该在模型文件中添加注释来记录它的发生。尽管。
我还建议在迁移中进行 FK。如果您的测试数据库具有与生产数据库相同的约束,那就更好了,这可能会导致非常隐蔽的错误。有一个 RedHill 插件 (redhillonrails_core),可以使迁移中的外键变得容易,并支持具有 FK 约束的模式转储,因此测试要简单得多。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)