ruby-on-rails-3 - 编辑字段值后进行 Rails 自定义验证

标签 ruby-on-rails-3

基本上我有一个包含金额和金钱字段的用户模型。当我第一次创建用户时,我验证 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/

相关文章:

ruby-on-rails - Rails + Devise +延迟工作?

ruby-on-rails - 我该如何修复这个创建功能?

ruby-on-rails - ActionMailer 测试,Rails 指南文档中的 assert_equal 永远不会是真的吗?

ruby-on-rails - 在一个项目中使用两个不同的数据库

ruby-on-rails - 我的 Bootstrap 按钮中的一些下划线和颜色遗迹

ruby - 上传数据库中的图片

ruby-on-rails - Rails - 简化计算模型和对象

ruby-on-rails - 自定义 bool 文本?

ruby-on-rails-3 - 如何使用 Atlassian Bamboo 部署 Ruby on rails 应用程序

ruby-on-rails-3 - Sunspot_Rails - 页面上的未定义方法 `searchable'