14

只是出于好奇,有没有办法说这个......

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

... Ruby on Rails 的一行代码?

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

4

4 回答 4

43

您可以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>

不会运行回调和验证。

于 2013-08-15T12:23:50.303 回答
4

注意:这仅在 ActiveRecordv4.0.2和更高版本中可用:

你可以这样做:

update_columns(field1: value, filed2: value)
于 2016-05-13T19:21:17.330 回答
2

这样做怎么样:

user.attributes = attributes
user.save(validate: false)
于 2013-02-14T18:02:07.607 回答
0

如果您需要速度,您也可以直接在 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}})

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

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

于 2014-08-06T22:19:51.963 回答