在 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 中有更短的方法吗?
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。