Mi piace molto il metodo first_or_create
:First_or_create con aggiornamento alla partita?
# 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'>
mi chiedevo come avrei potuto anche avere questo aggiornamento l'utente con il cognome 'Johannson' se non è presente o diverso. Alla ricerca del modo più breve per farlo. Un solo rivestimento simile a quello sopra sarebbe l'ideale.
Un possibile approccio è using first_or_initialize combined with update_attributes. L'unica preoccupazione che ho con questo approccio è che avrebbe eseguito un aggiornamento anche se ci fosse una corrispondenza del 100% sui campi forniti.
aggiornamento è un metodo privato. Chiamandolo in questo contesto si ottiene "NoMethodError: metodo privato 'update' chiamato ..." È necessario utilizzare update_attributes se si desidera eseguire tutto in una riga. –
Non sono sicuro di come lo hai codificato, ma non dovresti avere problemi in alcun modo. Attualmente sto usando questo in una visione e di controllo in questo formato: 'Session.where (user_id: @user, legal_case_id: @case) .first_or_create.update (last_active: ora)' aggiornamento è sempre stato un pubblico metodo. (Http://apidock.com/rails/ActiveRecord/Relation/update). Anche se si utilizza .update_attributes, è un alias per .update dopo Rails 3+ (http://apidock.com/rails/ActiveRecord/Persistence/update_attributes). Quindi "quasi" non dovrebbe importare in alcun modo. –