如何在rails上的activerecord中更新特定列?

时间:2017-07-22 09:36:08

标签: ruby-on-rails activerecord

我有一个名为代理商

的模型

代理商有效记录中的一行如下所示:

#<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。我怎么能这样做?

4 个答案:

答案 0 :(得分:2)

您也可以使用此

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

答案 1 :(得分:1)

Rails提供了许多更新activerecord的方法。您可以从此blog

中获得每种方法的差异
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)

答案 2 :(得分:0)

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

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

你应该花些时间阅读RubyonRails Guide

答案 3 :(得分:0)

要更新,您可以使用:

agency.update_column(:status, 0)

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

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

agency.update status: 0

在rails 6(https://blog.saeloun.com/2019/04/15/rails-6-deprecates-update-attributes.html)上不赞成使用update_attributes方法

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

agency = Agency.find(1) 

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

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

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