Почему области AREL становятся доступными только для чтения при использовании объединений?

Если вы используете joins в области ARel, результат становится доступным только для чтения (т.е. вы не можете обновлять какие-либо записи, которые вы возвращаете). Если вы не хотите, чтобы результат был доступен только для чтения, вы просто связываете readonly(false) с областью действия, например.

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

Но я предполагаю, что есть причина, по которой объединительные области по умолчанию доступны только для чтения. В чем причина настройки результатов только для чтения?

Ответ 1

Интересный вопрос. Я искал поисковые запросы. С запросом на объединение вы возвращаете одну запись с атрибутами таблицы пользователя+. Если вы попытались обновить один из атрибутов (скажем, "order_num" ) в таблице заказов вместо таблицы "Пользователь", оператор обновления в таблицу "Пользователь" не сможет найти order_num и сработает. Таким образом, объединительные области по умолчанию доступны только для чтения, чтобы это не происходило.

Литература: 1) http://blog.ethanvizitei.com/2009/05/joins-and-namedscopes-in-activerecord.html
2) Правильный способ предотвращения ActiveRecord:: ReadOnlyRecord?