如何更新 Ruby on Rails 中活动记录中的特定列?



我有一个名为Agency的模型。

代理机构活动记录中的一行如下所示:

#<Agency id: 1, name: "Hello", contact_person: "Abhimanyu", phone_number: "946159", email: "Abhimanyu@purple.com ", local_package: false, outstation: true, remarks: nil, status: 1>

在这里我想将status的值更改为0.我该怎么做?

Ruby on Rails提供了许多更新活动记录的方法。您可以从此博客文章中获取每种方法的差异。

agency = Agency.find(1)
  1. 更新

    agency.update(status: 0)
    
  2. update_attribute

    agency.update_attribute(:status, 0)
    
  3. update_column

    agency.update_column(:status, 0)
    
  4. update_columns

    agency.update_columns(status: 0)
    

你也可以使用这个

Agency.find(1).update_column(:status, 0)

你需要update_column方法。试试这个:

agency = Agency.find(1)
agency.update_column(:status, 0)

你应该花一些时间阅读Ruby on Rails指南。

要更新,您可以使用:

agency.update_column(:status, 0)

但是update_column将忽略您可能对模型进行的所有验证。

如果您不想忽略模型验证,我建议您使用:

agency.update status: 0

方法 update_attributes 在轨道 6 (https://blog.saeloun.com/2019/04/15/rails-6-deprecates-update-attributes.html( 上已弃用

若要查找要更新的记录,可以使用.find.where方法。如果可以通过 ID 使用查找:

agency = Agency.find(1)

如果需要按其他字段查找,请使用.where

agency = Agency.where(email: 'Abhimanyu@purple.com').first

使用.first是因为.where将返回一个包含对象的数组,您需要在其中选择一个对象。如果所需的对象不是第一个对象,则可以使用.last

最新更新