在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>
有什么选择呢?
答案 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
但典型的方法是使用where
和update_all
方法执行更新,使用单个更新查询效率更高:
Person.where(:company_country => "Alabama").update_all(:company_country => "Texas")