Tengo una declaración de creación para algunos modelos, pero está creando un registro dentro de una tabla de combinación independientemente de si el registro ya existe.En Rails, ¿cuál es la mejor manera de actualizar un registro o crear uno nuevo si no existe?
Aquí es lo que mi código es el siguiente:
@user = User.find(current_user)
@event = Event.find(params[:id])
for interest in @event.interests
@user.choices.create(:interest => interest, :score => 4)
end
El problema es que crea los registros no importa qué. Me gustaría crear un registro solo si ya no existe ningún registro; si existe un registro, me gustaría tomar el atributo del registro encontrado y sumar o restar 1.
He estado buscando algo que haya llamado find_or_create_by
. ¿Qué hace esto cuando encuentra un registro? Me gustaría que tome el atributo actual :score
y agregue 1.
¿Es posible encontrar o crear por id
? No estoy seguro de qué atributo encontraría, ya que el modelo que estoy buscando es un modelo de combinación que solo tiene id
claves externas y el atributo de puntuación.
me trataron
@user.choices.find_or_create_by_user(:user => @user.id, :interest => interest, :score => 4)
pero tiene
método no definido
find_by_user
¿Qué debo hacer?
Es current_user ya una instancia del modelo de usuario? Si es así, no necesita volver a encontrarlo y solo puede usar 'current_user' en lugar de' @user = ... '. –