Как обновить несколько столбцов в Ruby on Rails 3?
Просто из любопытства, есть ли способ сказать это...
user.update_column(:field1, true)
user.update_column(:field2, true)
... в одной строке в Ruby on Rails?
Насколько я знаю, метод update_columns
не существует...
Ответы
Ответ 1
Вы можете использовать update_all
следующим образом:
User.where(:id => user.id).update_all({:field1 => true, :field2 => true})
Это приведет к созданию следующего оператора обновления (mysql):
UPDATE users SET field1 = 1, field2 = 1 WHERE users.id = <whatever>
Обратные вызовы и проверки не будут выполняться.
Ответ 2
как это сделать:
user.attributes = attributes
user.save(validate: false)
Ответ 3
Вы можете сделать так:
update_columns(field1: value, filed2: value)
Ответ 4
Если вам нужна скорость, вы также можете вызвать выполнение непосредственно в 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}})
Обратите внимание, что проверки и обратные вызовы не будут выполняться.
Скопировано из fooobar.com/info/409751/...