У меня есть модель User, которая имеет атрибут: credits. Я хочу простую кнопку, которая добавит 5 к пользовательским кредитам через маршрут под названием "добавить", чтобы /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
ИЗМЕНИТЬ 2:
Хорошо, это была проблема проверки, из-за которой изменения в "EDIT" не работали, но я все равно люблю отвечать на исходный вопрос об обновлении без обратных вызовов!