我试图使用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")
答案 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")}
但迭代不是更新许多记录的正确方法,因为它会为您要更新的每个对象调用更新查询。