15

在 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 中可用。

谢谢你的帮助。

4

3 回答 3

33

这是 Rails 3.x 的解决方法:

User.where(id: user.id).update_all(attribute1: value1, attribute2: value2, ...)
于 2013-12-18T23:23:22.550 回答
0

如果您需要速度,您也可以直接在 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}})

请注意,不会运行验证和回调。

于 2014-08-06T22:12:27.537 回答
-1

您可以采取的另一种实现相同目的的方法是:

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

user.save(validate: false)

注意:您不必使用 validate false。但是,#update_column 方法会跳过验证和回调。因此,如果这是您要查找的内容,请使用 validate false。

于 2017-10-12T23:04:44.190 回答