2011-07-24 25 views
0

私は、:updateメソッドを使って同時に多くのアクティブなレコードを更新しようとしていますが、それらはうまく更新されないようです。アクティブレコードベースの更新メソッドは推奨されていませんか?

@drop_ship_order_line_items = DropShipOrderLineItem.update(params[:drop_ship_order_line_items].keys, params[:drop_ship_order_line_items].values).reject { |dsoli| dsoli.errors.empty? } 

params[:drop_ship_order_line_items]次のハッシュを返す:

{=> { "利用可能" => "1"} "11"、 "2" => { "利用可能" => "1"}}

しかし、モデルは正しく更新されていないようです...誰かが内部にいるのですか?あなたはレールの上、このようなモデルを更新することはできません

答えて

1

私の知る限りは、あなたはこのようにそれをしなければならないでしょう:

params[:drop_ship_order_line_items].each do |key,value| 
    DropShipOrderLineItem.find(key).update_attributes(value) 
end 

EDIT

attr_protected呼び出しがあなたのコードのどこかにおそらくあります保護されている属性があるかどうかを確認する必要があります。

あなたが安全に、この特定のコールの保護を無視することができると思うなら、あなたはいくつかの魔法をうまくない送信に使用することができます(免責事項:これはあなた自身であり、私はちょうど可能性を示しています):

params[:drop_ship_order_line_items].each do |key,value| 
    ship = DropShipOrderLineItem.find(key) 
    value.each do |property,value| 
     ship.send("#{property}=", value) 
    end 
    ship.save 
end  

これは属性保護を克服しようとしていますが、これは安全な呼び出しであり、あなたはこれを行うことで自分自身を燃焼させないことを確認する必要があります

+0

奇妙な理由から、バルクでの更新が許可されていないかのようにupdate_attributeを使用することしかできません。 – mabounassif

+0

属性保護の周りを飛び回るソリューションを追加するように編集しました。 –

関連する問題