Ответ 1
В этом случае обходной путь для Rails 3.x:
User.where(id: user.id).update_all(attribute1: value1, attribute2: value2, ...)
Есть ли более короткий путь для этого в Rails 3?
user.update_column(:attribute1, value1)
user.update_column(:attribute2, value2)
user.update_column(:attribute3, value3)
user.update_column(:attribute4, value4)
Я попробовал update_columns
, но доступен только в Rails 4.
Спасибо за любую помощь.
В этом случае обходной путь для Rails 3.x:
User.where(id: user.id).update_all(attribute1: value1, attribute2: value2, ...)
Если вам нужна скорость, вы также можете вызвать выполнение непосредственно в AR-соединении. Я использовал что-то подобное для импорта большого количества данных.
connection = ActiveRecord::Base.connection
email = connection.quote(email)
zip = connection.quote(zip)
connection.execute(%{UPDATE "users" SET "email" = #{email}, "zip" = #{zip} WHERE "users"."id" = #{user.id}})
Обратите внимание, что проверки и обратные вызовы не будут выполняться.
другой подход, который вы можете предпринять, который выполняет одно и то же:
user.assign_attributes(
first_name: 'foo',
last_name: 'bar'
)
user.save(validate: false)
ПРИМЕЧАНИЕ. Вам не нужно использовать validate false. Однако метод #update_column пропускает проверки и обратные вызовы. Поэтому, если это то, что вы ищете, используйте validate false.