2013-09-25 42 views
5

câu hỏi rất đơn giản - Tôi muốn cập nhật một bản ghi chỉ phù hợp với 2 tham số.truy vấn cập nhật với mệnh đề where

Tôi có nên làm việc đó như thế này: ví dụ

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

Tôi đã tìm thấy bằng update_all nhưng tôi chỉ muốn cập nhật tối đa là 1 kỷ lục.

Trả lời

16

Kiểm tra nếu điều này làm việc với các DBMS của bạn và DB adapter:

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

Cập nhật:

Các limit()update_all() combo là một example in the docs, vì vậy nó có thể được hỗ trợ bởi hầu hết các adapter DB.

+0

Nếu bạn không sử dụng SQL thuần túy trong các phương pháp của mình, Rails sẽ dịch truy vấn vào đúng cú pháp SQL, tùy thuộc vào bộ điều hợp DB. – MrYoshiji

+0

Đây là những gì tôi cần - chưa thực hiện nhiều thử nghiệm nhưng có vẻ ổn. thanks – tommyd456

+1

Ví dụ này thiết lập chính xác một chuỗi bản ghi cụ thể bằng cách sử dụng trình chỉ định 'order()' trước 'limit()'. Điều này quan trọng để tránh cập nhật một số bản ghi tùy ý trong tập hợp khớp với đặc tả 'where()'. –

Các vấn đề liên quan