Tôi thực sự thích first_or_create
phương pháp:First_or_create có cập nhật về trận đấu không?
# Find the first user named Scarlett or create a new one with a particular last name.
User.where(:first_name => 'Scarlett').first_or_create(:last_name => 'Johansson')
# => <User id: 2, first_name: 'Scarlett', last_name: 'Johansson'>
tôi đã tự hỏi làm thế nào tôi cũng có thể có bản cập nhật này người dùng với last_name 'Johannson' nếu nó không có mặt hoặc khác nhau. Tìm cách ngắn nhất để làm điều này. Một lớp lót tương tự như trên sẽ là lý tưởng.
Một cách tiếp cận có thể là using first_or_initialize combined with update_attributes. Mối quan tâm duy nhất tôi có với phương pháp này là nó sẽ chạy một bản cập nhật ngay cả khi có một trận đấu 100% trên các trường được cung cấp.
cập nhật là một phương pháp riêng tư. Gọi nó trong ngữ cảnh này cho phép "NoMethodError: phương thức riêng' cập nhật 'được gọi là ... "Bạn cần sử dụng update_attributes nếu bạn muốn làm tất cả trong một dòng. –
Tôi không chắc cách bạn mã hóa điều này, nhưng bạn cũng không nên gặp bất kỳ vấn đề nào. Tôi hiện đang sử dụng này trong một cái nhìn và điều khiển ở định dạng này: 'Session.where (user_id: @user, legal_case_id: @case) .first_or_create.update (last_active: bây giờ) ' Cập nhật luôn luôn là một cộng đồng phương pháp. (http://apidock.com/rails/ActiveRecord/Relation/update). Ngay cả khi bạn đang sử dụng .update_attributes, đó là bí danh để .update sau Rails 3+ (http://apidock.com/rails/ActiveRecord/Persistence/update_attributes). Vì vậy, nó "gần như" không nên quan trọng một trong hai cách. –