假设我有两张桌子:usersorders.一个用户有很多订单,所以在我的订单表中自然有一个外键用户id.

rails中的最佳实践是什么(在速度、风格和参考完整性方面),以确保删除用户时,所有相关订单也会被删除?我正在考虑以下 Select :

case 1.在用户模型中使用:dependent => :destroy

case 2.在postgres中定义表格顺序并编写

user_id integer REFERENCES users(id) ON DELETE CASCADE

有什么理由我应该使用 case 1吗?看来 case 2正在做我想做的一切?执行速度有差异吗?

推荐答案

这真的取决于你想要的行为.在 case 1中,每个相关订单都会调用destroy,因此ActiveRecord callbacks也会调用destroy.在 case 2中,这些回调不会被触发,但会更快,并保证引用完整性.

在应用程序的初期,我建议使用:dependent => :destroy,因为它允许您以独立于数据库的方式进行开发.一旦开始扩展,出于性能/完整性考虑,应该开始在数据库中进行扩展.

Ruby-on-rails相关问答推荐

rails中Net::STP的多文件模式

安装特定版本的Ruby时出现问题(OpenSSL问题)

如何判断字符串中是否包含列值

Ruby on Rails 身份验证:设计注册不起作用

Rails 7 - 富文本不显示附加的媒体内容

从Rails中的字符串中间提取子字符串

active_storage.resolve_model_to_route的不同值代表什么意思?

我如何在不在 gemfile 中的 rake 任务中要求 gem?

rails turbo frame 显然在更新,但浏览器窗口保持不变

多行与内联块之间的不同行为

Ruby on Rails/Activerecord 排序自引用查询?

Ruby on Rails 7 与 React 集成

你如何发布到 Capybara 中的 URL?

Rails 将字符串与视图中的变量连接的最佳方法

rmagick 和 OS X Lion

Rails - 具有空数组的强参数

Rails 3 设计,current_user 在模型中不可访问?

rake 任务中的 def 块

使用 ActiveRecord 获取列名

如何拆分长行的 Ruby