gpt4 book ai didi

mysql - 我应该使用 ON DELETE CASCADE、:dependent => :destroy, 还是两者都使用?

转载 作者:可可西里 更新时间:2023-11-01 07:47:06 27 4
gpt4 key购买 nike

在 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 约束的模式转储,因此测试要简单得多。

关于mysql - 我应该使用 ON DELETE CASCADE、:dependent => :destroy, 还是两者都使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1189970/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com