私はこのクラスを持っています:
class Payment < ActiveRecord::Base
attr_accessible :amount, :invoice_id
belongs_to :invoice
validates :amount, :numericality => { :greater_than => 0, :less_than_or_equal_to => :maximum_amount }
after_save :update_amount_payable
after_destroy :update_amount_payable
private
def maximum_amount
invoice.amount_payable
end
def update_amount_payable
invoice.update_amount_payable
end
end
class Invoice < ActiveRecord::Base
has_many :payments
after_save :update_amount_payable
def update_amount_payable
update_column(:amount_payable_in_cents, new_amount_payable)
end
private
def new_amount_payable
(total - payments.map(&:amount).sum) * 100
end
end
上記のコードは機能します。invoice.amount_payable
しかし、支払い額が未満になることは決してないことをどのように検証でき0
ますか?
特に、同じ請求書に対して複数の支払いが可能な場合、これは注意が必要です。
私は何時間もこれを回避しようとしてきましたが、役に立ちませんでした。ここでデータベースをロールバックするためのafter
コールバックを使用できますか?
助けてくれてありがとう。