gpt4 book ai didi

activerecord - 为什么 ARel 作用域在使用连接时变为只读?

转载 作者:行者123 更新时间:2023-12-04 02:28:32 25 4
gpt4 key购买 nike

如果您使用 joins在 ARel 范围内,结果变为只读(即您无法更新您返回的任何记录)。如果您不希望结果是只读的,您只需链接 readonly(false)到范围,例如

User.joins(:orders).where(:orders => { :state => 'completed' }).readonly(false)

但我猜测默认情况下连接范围是只读的是有原因的。将结果设置为只读的原因是什么?

最佳答案

有趣的问题。我在谷歌上搜索.....使用连接查询,您将返回一条具有 User + order 表属性的记录。如果您尝试更新订单表而不是用户表中的属性之一(例如“order_num”),则用户表的更新语句将无法找到 order_num 并且会崩溃。所以默认情况下连接范围是只读的,以防止这种情况发生。

引用:
1) http://blog.ethanvizitei.com/2009/05/joins-and-namedscopes-in-activerecord.html
2) Proper way to prevent ActiveRecord::ReadOnlyRecord?

关于activerecord - 为什么 ARel 作用域在使用连接时变为只读?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8447424/

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