Подтвердить что ты не робот

Использование update_columns в Rails 3?

Есть ли более короткий путь для этого в 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.

Спасибо за любую помощь.

4b9b3361

Ответ 1

В этом случае обходной путь для Rails 3.x:

User.where(id: user.id).update_all(attribute1: value1, attribute2: value2, ...)

Ответ 2

Если вам нужна скорость, вы также можете вызвать выполнение непосредственно в 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}})

Обратите внимание, что проверки и обратные вызовы не будут выполняться.

Ответ 3

другой подход, который вы можете предпринять, который выполняет одно и то же:

user.assign_attributes(
  first_name: 'foo',
  last_name: 'bar'
)

user.save(validate: false)

ПРИМЕЧАНИЕ. Вам не нужно использовать validate false. Однако метод #update_column пропускает проверки и обратные вызовы. Поэтому, если это то, что вы ищете, используйте validate false.