2013-09-25 13 views
5

bardzo proste pytanie - chcę zaktualizować tylko jeden rekord, który pasuje do 2 parametrów.zaktualizuj zapytanie, gdzie zdanie

powinienem robić to tak:

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

znalazłem przykłady korzystania update_all ale tylko chcesz zaktualizować maksymalnie 1 rekordu.

Odpowiedz

16

Sprawdź czy to działa z DBMS i adaptera DB:

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

Aktualizacja:

limit() i update_all() kombi jest example in the docs, więc to prawdopodobnie obsługiwany przez większość adapterów DB.

+0

Jeśli nie używasz czystego SQL w swoich metodach, Railsy przetłumaczy zapytanie na poprawną składnię SQL, w zależności od adaptera DB. – MrYoshiji

+0

To jest to, czego potrzebuję - nie zrobiłem zbyt wiele testów, ale wydaje się dobrze. dzięki – tommyd456

+1

Przykład poprawnie ustanawia określoną sekwencję rekordów za pomocą specyfikatora 'order()' przed 'limit()'. Jest to ważne, aby uniknąć aktualizacji dowolnego rekordu w zbiorze, który pasuje do specyfikacji 'where()'. –

Powiązane problemy