【发布时间】:2012-01-28 21:00:21
【问题描述】:
我有一个具有 :credits 属性的用户模型。我想要一个简单的按钮,通过一个名为“add”的路由为用户的信用添加 5,以便 /users/3/add 为用户 id = 3 的信用添加 5。
def add
@user = User.find(params[:id])
@user.credits += 5
redirect_to root_path
end
这是我的控制器的相关部分。问题是,我不想调用@user.save,因为我有一个 before_save 回调,它根据当前的 UTC 时间重新加密用户的密码。我只想简单的给属性加5,避免回调,没想到这么简单的事情竟然这么难。
编辑:
我将回调更改为 :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:
好的,这是一个验证问题,导致“编辑”中的更改不起作用,但我仍然希望能回答原始问题的答案,即在没有回调的情况下进行更新!
【问题讨论】:
-
我提供了一个链接,其中包含不触发回调的方法列表,Finbarr 和我都建议使用条件回调——您还在寻找哪些其他解决方案?
标签: ruby-on-rails ruby model attributes callback