Rails: atualize o atributo do modelo sem chamar retornos de chamada
Tenho um modelo de usuário que possui um atributo: credits. Eu quero um botão simples que adicione 5 aos créditos do usuário, através de uma rota chamada "add", para que / users / 3 / add adicione 5 aos créditos do ID do usuário = 3.
def add
@user = User.find(params[:id])
@user.credits += 5
redirect_to root_path
end
Essa é a parte relevante do meu controlador. O problema é que não quero chamar @ user.save porque tenho um retorno de chamada before_save que criptografa novamente a senha do usuário com base no horário atual do UTC. Eu só quero adicionar 5 ao atributo e evitar o retorno de chamada, nunca pensei que uma coisa tão simples pudesse ser tão difíci
EDITAR
Alterei o retorno de chamada para: before_create, aqui está o meu novo 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
e aqui está o meu código no modelo:
def add_credits(num)
self.credits = num
end
EDIT 2:
Ok, foi um problema de validação que fez com que as alterações em "EDITAR" não funcionassem, mas eu ainda gostaria de responder à pergunta original de atualização sem retorno de chamad