Rails 3 update_attributes用于数组

时间:2014-05-16 18:26:30

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

在Rails 3.2控制台中,我试图将多个记录更新为相同的值。

例如:

h=Person.find_all_by_company_country("Alabama")

现在我想将company_country更改为“Texas”

例如:

h.update_attributes(company_country: "Texas")
NoMethodError: undefined method `update_attributes' for #<Array:0x00000003b01d70>

有什么选择呢?

3 个答案:

答案 0 :(得分:6)

您可以执行以下操作:

Person.where(company_country: "Alabama").update_all(company_contry: "Texas")

请在此处查看更新所有文档:http://apidock.com/rails/v3.2.1/ActiveRecord/Relation/update_all

答案 1 :(得分:1)

将您的方法find_all_by_company_country替换为使用有效记录查询,以便您可以返回关系。

h = Person.where(company_country: "Alabama")

然后只需调用:

h.update_all company_county: "Texas"

请注意,update_all不会调用活动记录回调。如果你需要回调&amp;要点火,而是使用:

h.each { |record| record.update_attributes({ company_country: "Texas" }) }

答案 2 :(得分:1)

正如您在输出中看到的那样,find_all*方法的结果返回一个数组对象,该对象没有update_attributes方法。

举个例子,要修改数组的每个记录,你会像这样迭代每个记录:

Person.find_all_by_company_country("Alabama").each do |record|
  record.update(:company_country => "Texas")
end

但典型的方法是使用whereupdate_all方法执行更新,使用单个更新查询效率更高:

Person.where(:company_country => "Alabama").update_all(:company_country => "Texas")