2013-09-25 125 views
5

非常簡單的問題 - 我想更新一個只匹配2個參數的記錄。用where子句更新查詢

我應該做這樣的:使用update_all但我只想要一個最大1個記錄的更新

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

我發現的例子。

回答

16

檢查這是否與你的DBMS和DB適配器:

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

更新:

limit()update_all()組合是example in the docs,所以它可能是最DB適配器支持。

+0

如果您的方法中沒有使用純SQL,Rails將根據數據庫適配器將查詢轉換爲適當的語法SQL。 – MrYoshiji

+0

這就是我所需要的 - 沒有做太多的測試,但似乎很好。謝謝 – tommyd456

+1

這個例子在limit()之前使用'order()'說明符正確地建立了一個特定的記錄序列。這對於避免更新集合中與where()'規範匹配的任意記錄非常重要。 –