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!

Respuestas a la pregunta(18)

Su respuesta a la pregunta