Почему области ARel становятся доступными только для чтения при использовании объединений? - PullRequest
11 голосов
/ 09 декабря 2011

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

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

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

1 Ответ

1 голос
/ 25 июля 2012

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

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

...