2013-05-04 64 views
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),然後我發出錯誤「Payments should小於或等於不必要的發票金額「。

,如果我試圖讓2000的另一個付款時的發票餘額爲0

我怎麼能糾正的錯誤應在運行?過濾器之前

+0

你可以做一個before_validation掛鉤。 before_validation:your_validation – Mattherick 2013-05-04 13:07:44

+0

我做了一個before_validation鉤子,問題仍然存在,首先保存,然後運行驗證 – zurik 2013-05-04 13:17:32

+0

我認爲before_save是你需要的,但要確保它返回false以防止保存! – ex0ns 2013-05-04 14:05:12

回答

0

使用您的驗證

before_save :payment_not_more_than_balance