2013-09-25 8 views
5

非常に簡単な質問 - 2つのパラメータと一致するレコードを1つだけ更新したいと思います。where句を使ってクエリを更新する

は、私はこのようにそれをやっている必要があります。

Model.where(:email =>"[email protected]",:code => "chejd").update(:password => "password").first 

私はupdate_all使用例を発見したが、私は唯一の1つのレコードの最大を更新したいです。

答えて

16

チェックこれはあなたのDBMSとDBアダプタで動作するかどうか:

Model.where(conditions).limit(1).update_all(changes) # => 1 

更新:

limit()update_all()コンボがexample in the docsあるので、それはおそらく、ほとんどのDBアダプタによってサポートされています。

+0

メソッドで純粋なSQLを使用しない場合、RailsはDBアダプタに応じて適切な構文のSQLにクエリを変換します。 – MrYoshiji

+0

これは私が必要とするものです。多くのテストは行っていませんが、うまくできています。 thanks – tommyd456

+1

この例では、 'limit()'の前に 'order()'指定子を使って特定のレコードシーケンスを正しく設定しています。これは 'where()'指定と一致するセット内のいくつかの任意のレコードの更新を避けるために重要です。 –