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")

4

3 回答 3

9

一个可能的解决方案

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

于 2012-05-30T12:33:22.937 回答
3

如果您知道只有一个 staging 对应于 (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
于 2012-05-30T12:45:13.673 回答
2

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

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

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

于 2012-05-30T12:50:37.367 回答