У меня есть модель User, которая имеет атрибут :credits. Мне нужна простая кнопка, которая добавит 5 к кредитам пользователя, через маршрут под названием "add" так, что /users/3/add добавит 5 к кредитам пользователя id = 3.
def add
@user = User.find(params[:id])
@user.credits += 5
redirect_to root_path
end
Это соответствующая часть моего контроллера. Проблема в том, что я не хочу вызывать @user.save, потому что у меня есть обратный вызов before_save, который повторно шифрует пароль пользователя на основе текущего времени UTC. Я просто хочу просто добавить 5 к атрибуту и избежать обратного вызова, я никогда не думал, что такая простая вещь может быть такой сложной.
EDIT:
Я изменил обратный вызов на :before_create, вот мой новый код контроллера (соответствующая часть):
def add
@user = User.find(params[:id])
@user.add_credits(5)
@user.save
flash[:success] = "Credits added!"
redirect_to root_path
end
и вот мой код в модели:
def add_credits(num)
self.credits = num
end
EDIT 2:
Ok это была проблема валидации, из-за которой изменения в "EDIT" не работали, но я все еще хотел бы получить ответ на первоначальный вопрос об обновлении без обратного вызова!