Ho una dichiarazione di creazione per alcuni modelli, ma sta creando un record all'interno di una tabella di join indipendentemente dal fatto che il record esista già.In Rails, qual è il modo migliore per aggiornare un record o crearne uno nuovo se non esiste?
Ecco ciò che il mio codice è simile:
@user = User.find(current_user)
@event = Event.find(params[:id])
for interest in @event.interests
@user.choices.create(:interest => interest, :score => 4)
end
Il problema è che si crea record non importa cosa. Mi piacerebbe che creasse un record solo se nessun record esiste già; se esiste un record, vorrei che prenda l'attributo del record trovato e aggiunga o sottragga 1.
Mi sono guardato in giro per aver visto qualcosa chiamato find_or_create_by
. Cosa fa questo quando trova un record? Vorrei prendere l'attuale attributo :score
e aggiungere 1.
È possibile trovare o creare id
? Non sono sicuro di quale attributo troverei, dal momento che il modello che sto osservando è un modello di join che ha solo chiavi esterne id
e l'attributo punteggio.
ho cercato
@user.choices.find_or_create_by_user(:user => @user.id, :interest => interest, :score => 4)
ma ottenuto
metodo non definito
find_by_user
Cosa devo fare?
È current_user già un'istanza del modello User? Se è così, non è necessario ritrovarlo e puoi semplicemente usare 'current_user' invece di' @user = ... '. –