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

(trackno、orderno)に対応するステージングが1つしかないことがわかっている場合は、次のように試すことができます。

@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 に答える