2013-05-04 2 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), и позже я получаю сообщение об ошибке «Платежи должны быть меньше или равно сумме счета-фактуры », которая не является обязательной.

Ошибка должна работать, если я попытаюсь сделать еще один платеж в 2000 году, когда баланс счета составляет 0

Как я исправить это?

+0

вы могли бы сделать before_validation крюк. before_validation: your_validation – Mattherick

+0

Я сделал крючок before_validation, и проблема все еще сохранялась, сначала сохранялась, а затем выполнялась проверка – zurik

+0

. Я думаю, что before_save - это то, что вам нужно, но убедитесь, что оно возвращает false, чтобы предотвратить сохранение! – ex0ns

ответ

0

используйте перед фильтром на вашей проверки

before_save :payment_not_more_than_balance 
Смежные вопросы