如何更新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