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
。。。