次のような支払いモデルがあります。
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 の別の支払いを行おうとすると、エラーが発生するはずです。
どうすればそれを修正できますか?