在Rails 3中使用update_columns?

在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连接上调用execute。 我使用这样的东西来导入大量数据。

 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}}) 

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

你可以采取另一种方法来实现同样的目的:

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

注意:您不必使用validate false。 但是,#update_column方法确实跳过了validation和回调。 因此,如果您正在寻找,请使用validate false。