ActiveRecord :: Relation的未定义方法`update_attribute'

时间:2012-05-30 12:32:04

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

我试图使用Object.update_attributes(:field => "parameter")更新数据库中的记录 为了展示我试图做的一个简单的例子就是这个。请参阅以下代码

a = params["ORDERNO"].to_s
b =  params["TRACKNO"].to_s    
@bd=Staging.where(:trackno => b , :orderno=> a)
    if @bd.nil? 
       puts "not found"
    else
       @bd.update_attributes(:field_name => "PARAMETER")
    end

我也试过@bd.first.update_attributes(::field_name => "PARAMETER")

3 个答案:

答案 0 :(得分:7)

的可能解决方案

使用update_all(:field_name => "PARAMETER")

答案 1 :(得分:3)

如果您知道只有一个与(trackno,orderno)相对应的分段 你可以试试这样的东西

@bd =Staging.find_by_trackno_and_orderno(b,a)
if @bd
  @bd.update_attributes(:field_name => value)
else
  #whatever you want to do
end

答案 2 :(得分:2)

您的查询@bd=Staging.where(:trackno => b , :orderno=> a)返回一个对象数组。

Array通常没有#update_attributes方法。因此,您需要重写查询以仅获取1个对象,或使用每个对象遍历查询结果中的所有对象:@bd.each{|r| r.update_attributes(:field_name => "PARAMETER")}

但迭代不是更新许多记录的正确方法,因为它会为您要更新的每个对象调用更新查询。