Ruby on rails 未定义的方法“更新”属性';对于ActiveRecord::关系

Ruby on rails 未定义的方法“更新”属性';对于ActiveRecord::关系,ruby-on-rails,ruby,ruby-on-rails-3,ruby-on-rails-3.1,Ruby On Rails,Ruby,Ruby On Rails 3,Ruby On Rails 3.1,我试图使用Object.update\u 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 @

我试图使用
Object.update\u 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”)

这是一个可能的解决方案


使用
update\u all(:field\u name=>“PARAMETER”)

这是一个可能的解决方案


如果您知道只有一个对应于(trackno、orderno)的暂存,请使用
update\u all(:field\u name=>“PARAMETER”)

你可以试试这样的

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

如果您知道只有一个对应于(trackno、orderno)的staging 你可以试试这样的

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

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

数组
通常没有
#update_属性
方法。因此,您需要重写查询以仅获取1个对象,或者使用each:
@bd.each{r|r.update_attributes(:field_name=>“PARAMETER”)}


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

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

数组
通常没有
#update_属性
方法。因此,您需要重写查询以仅获取1个对象,或者使用each:
@bd.each{r|r.update_attributes(:field_name=>“PARAMETER”)}


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

这是正确的答案。给定
User.where(login:'admin')。update_all locked_at:nil
,AR生成
update users SET users.locked_at=NULL where users.login='admin'
。这使得DB能够在不实例化过多Ruby对象的情况下处理业务。值得注意的是,这确实会像update_属性那样运行回调。这是正确的答案。给定
User.where(login:'admin')。update_all locked_at:nil
,AR生成
update users SET users.locked_at=NULL where users.login='admin'
。这使DB能够在不实例化过多Ruby对象的情况下处理业务。值得注意的是,这确实会像update_attributes那样运行回调。这是不正确的,因为
where()
基于
ActiveRecord::Relation
返回一个对象,用于进一步的生成器方法。例如
update\u all
…这是不正确的,因为
where()
基于
ActiveRecord::Relation
返回一个对象,用于进一步的生成器方法。例如
update\u all
。。。