0

次のような支払いモデルがあります。

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 の別の支払いを行おうとすると、エラーが発生するはずです。

どうすればそれを修正できますか?

4

1 に答える 1

0

検証で before フィルターを使用する

before_save :payment_not_more_than_balance
于 2013-05-04T19:35:04.813 に答える