2010-12-15 12 views
14

「user_products」というテーブルと、RailsアプリケーションでUserProductという対応するモデルがあるとしましょう。私のテーブルには「is_temporary」というフィールドがあります。今、私はActiveRecordの抽象化レイヤーを使用して、しかし、このようなクエリを実行するとします。1つのクエリを使用して複数のレコードを同時にRailsのActiveRecordで更新しますか?

UPDATE user_products SET is_temporary = false WHERE user_id = 12345; 

のActiveRecordを使用して、私はこれを行うことができます方法はありますか?たぶん

UserProduct.find_by_user_id(12345).update_attributes(:is_temporary => false) 

の線に沿って何かが私はこれを実現するために実行される唯一のクエリをしたいと思います。

答えて

16
UserProduct.update_all({:is_temporary => false}, {:user_id => 12345}) 
18
UserProduct.update_all({:is_temporary => false}, {:user_id => 12345}) 

が、注意してください:UserProductのインスタンスが今までインスタンス化されませんので、これは、すべての検証とコールバックをスキップします。

19

これは古い投稿です。私は、クエリがはるかに高く評価

UserProduct.where(:user_id => 12345).update_all(:is_temporary => false) 

乾杯

+1

、感謝されます。この場合には、誰かがそれをチェック:)(レール4)

DEPRECATION: Relation#update_all with conditions is deprecated. Please use Item.where(color: 'red').update_all(...) rather than Item.update_all(..., color: 'red'). 

を更新します! – Sebastialonso

+0

これはRails 3でも動作するようです – lavaturtle

関連する問題