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
我怎麼能糾正的錯誤應在運行?過濾器之前
你可以做一個before_validation掛鉤。 before_validation:your_validation – Mattherick 2013-05-04 13:07:44
我做了一個before_validation鉤子,問題仍然存在,首先保存,然後運行驗證 – zurik 2013-05-04 13:17:32
我認爲before_save是你需要的,但要確保它返回false以防止保存! – ex0ns 2013-05-04 14:05:12