【问题标题】:Using update_columns in Rails 3?在 Rails 3 中使用 update_columns?
【发布时间】:2013-08-17 16:38:40
【问题描述】:

在 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 中可用。

感谢您的帮助。

【问题讨论】:

  • 要清楚,这个问题没有提到是否需要回调。需要澄清,在此之前可以安全地假设不需要回调。
  • 您提出了一个未经澄清就无法回答的问题。然后,当被问及回调时,您没有澄清。不要试图听起来粗鲁,但请理解当人们试图提供帮助时,你应该跟进。

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.2


【解决方案1】:

这是 Rails 3.x 的解决方法:

User.where(id: user.id).update_all(attribute1: value1, attribute2: value2, ...)

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      您可以采取的另一种实现相同目的的方法是:

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

      注意:您不必使用 validate false。但是,#update_column 方法会跳过验证和回调。因此,如果这是您要查找的内容,请使用 validate false。

      【讨论】:

        猜你喜欢
        • 2015-07-06
        • 2020-08-16
        • 1970-01-01
        • 1970-01-01
        • 2011-10-27
        • 2013-12-18
        • 1970-01-01
        • 2011-07-18
        • 2011-06-21
        相关资源
        最近更新 更多