Rails: Actualizar el atributo del modelo sin invocar devoluciones de llamada
Tengo un modelo de usuario que tiene un atributo: créditos. Quiero un botón simple que agregará 5 a los créditos del usuario, a través de una ruta llamada "agregar" para que / users / 3 / add agregue 5 a los créditos del usuario id = 3.
def add
@user = User.find(params[:id])
@user.credits += 5
redirect_to root_path
end
Esa es la parte relevante de mi controlador. El problema es que no quiero llamar a @ user.save porque tengo una devolución de llamada before_save que vuelve a cifrar la contraseña del usuario en función de la hora UTC actual. Simplemente quiero agregar 5 al atributo y evitar la devolución de llamada, nunca pensé que algo tan simple pudiera ser tan difícil.
EDITAR
Cambié la devolución de llamada a: before_create, aquí está mi nuevo código de controlador (parte relevante):
def add
@user = User.find(params[:id])
@user.add_credits(5)
@user.save
flash[:success] = "Credits added!"
redirect_to root_path
end
y aquí está mi código en el modelo:
def add_credits(num)
self.credits = num
end
EDIT 2:
Ok, fue un problema de validación que hizo que los cambios en "EDITAR" no funcionaran, ¡pero aún así me encantaría responder a la pregunta original de actualizar sin devoluciones de llamada!