出于好奇,有没有办法说出来......
user.update_column(:field1, true)
user.update_column(:field2, true)
...在Ruby on Rails的一行中?
据我所知,update_columns
方法不存在......
答案 0 :(得分:40)
您可以按如下方式使用update_all
:
User.where(:id => user.id).update_all({:field1 => true, :field2 => true})
这将生成以下更新语句(mysql):
UPDATE users SET field1 = 1, field2 = 1 WHERE users.id = <whatever>
不会运行回调和验证。
答案 1 :(得分:1)
这样做是怎么回事:
user.attributes = attributes
user.save(validate: false)
答案 2 :(得分:1)
你可以这样做:
update_columns(field1: value, filed2: value)
答案 3 :(得分:0)
如果您需要速度,您还可以直接在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}})
请注意,不会运行验证和回调。
复制