Rails: Обновление атрибута модели без вызова обратных вызовов

У меня есть модель 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" не работали, но я все еще хотел бы получить ответ на первоначальный вопрос об обновлении без обратного вызова!

68
задан Sam Stern 28 December 2011 в 02:08
поделиться