如何更新Ruby on Rails 3中的多个列?

出于好奇,有没有办法说这个…

user.update_column(:field1, true) user.update_column(:field2, true) 

…在Ruby on Rails中的一行中?

据我所知, update_columns方法不存在……

您可以使用update_all ,如下所示:

 User.where(:id => user.id).update_all({:field1 => true, :field2 => true}) 

这将生成以下更新语句(mysql):

 UPDATE users SET field1 = 1, field2 = 1 WHERE users.id =  

不会运行回调和validation。

怎么样这样做:

 user.attributes = attributes user.save(validate: false) 

你可以这样做:

 update_columns(field1: value, filed2: value) 

如果您需要速度,您还可以直接在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和回调。

复制自https://stackoverflow.com/a/25171127/1520775