为什么使用连接时ARel范围变为只读?

时间:2011-12-09 15:05:10

标签: activerecord arel

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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