Обновлять несколько записей одновременно с ActiveRecord в Rails, используя один запрос? - PullRequest
14 голосов
/ 16 декабря 2010

Предположим, у меня есть таблица с именем user_products и соответствующая модель UserProduct в моем приложении на Rails.У меня также есть поле с именем «is_teven» в моей таблице.Теперь предположим, что я хочу выполнить такой запрос, но используя уровень абстракции ActiveRecord:

UPDATE user_products SET is_temporary = false WHERE user_id = 12345;

Есть ли способ сделать это с помощью ActiveRecord?Может быть, что-то вроде

UserProduct.find_by_user_id(12345).update_attributes(:is_temporary => false)

Я бы хотел, чтобы для этого был выполнен только один запрос.

Ответы [ 3 ]

19 голосов
/ 04 апреля 2014

Это старый пост.Я обновил это в случае, если кто-то проверяет это :) (Rails 4)

DEPRECATION: Relation#update_all with conditions is deprecated. Please use Item.where(color: 'red').update_all(...) rather than Item.update_all(..., color: 'red').

Так что запрос будет

UserProduct.where(:user_id => 12345).update_all(:is_temporary => false)

Cheers

18 голосов
/ 16 декабря 2010
UserProduct.update_all({:is_temporary => false}, {:user_id => 12345})

Хотя будьте осторожны: при этом пропускаются все проверки и обратные вызовы, поскольку экземпляр UserProduct никогда не будет создан.

16 голосов
/ 16 декабря 2010
UserProduct.update_all({:is_temporary => false}, {:user_id => 12345})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...