基本上我有一个包含金额和金钱字段的用户模型。当我第一次创建用户时,我验证 user.amount <= user.money
。但是,用户可以通过“编辑”更改金额。在更新操作中,当用户更改金额时,我通过
amount_change = user.amount - params[:user][:amount].to_f
我不知道这是否是好的形式,但它对我有用。基本上我不会存储差异并仅在用户尝试更改金额时计算它。无论如何,当用户编辑时,我想验证 amount_change <= user.money
反而。我怎样才能做到这一点?我觉得我应该将一些东西传递给验证,但我不知道如何传递 amount_change
因为它是在我的用户 Controller 的更新方法中间计算的。
非常感谢!
最佳答案
您可以使用ActiveModel::Dirty访问旧值(如 amount_was
):
class User < ActiveRecord::Base
# ...
validate :ensure_amount_change_less_than_money,
:on => :update,
:if => :amount_changed?
def ensure_amount_change_less_than_money
if (self.amount - self.amount_was) <= self.money
errors.add(:money, 'Amount change must be less than money')
end
end
end
关于ruby-on-rails-3 - 编辑字段值后进行 Rails 自定义验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4515110/