数据库提交后的验证

时间:2013-05-04 12:51:32

标签: ruby-on-rails ruby ruby-on-rails-3 validation

我的付款模式如下:

class Payment < ActiveRecord::Base
  attr_accessible :amount, :method, :payment_date, :reference_no, :invoice_id
  belongs_to :invoice

  validates :amount, presence: true
  validates :method, presence: true
  validates :payment_date, presence: true
  validate  :payment_not_more_than_balance

  def payment_not_more_than_balance
     if amount > self.invoice.balance
     self.errors.add :amount, 'Payments should be less than or equal to the Invoice amount'
  end
 end
end

我正在尝试运行验证,一旦有人尝试进行大于发票余额的付款,就会发出验证错误。

目前,上面的代码向数据库提交然后运行验证。

也就是说,如果我的发票余额为2000,当我支付2000时,付款已提交(发票余额为0),我后来发出错误'付款应该是小于或等于“不需要的发票金额”。

如果我在发票余额为0时尝试再次支付2000,则应该运行错误

我该如何纠正?

1 个答案:

答案 0 :(得分:0)

在验证中使用前置过滤器

before_save :payment_not_more_than_balance