如果在ARel范围内使用joins
,结果将变为只读(即您无法更新您获得的任何记录)。如果您不希望结果为只读,则只需将readonly(false)
链接到范围,例如
User.joins(:orders).where(:orders => { :state => 'completed' }).readonly(false)
但我猜测默认情况下连接范围是只读的原因。将结果设置为只读的原因是什么?
答案 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?