У меня есть модель платежей следующим образом:проверка после представления базы данных
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
Как я исправить это?
вы могли бы сделать before_validation крюк. before_validation: your_validation – Mattherick
Я сделал крючок before_validation, и проблема все еще сохранялась, сначала сохранялась, а затем выполнялась проверка – zurik
. Я думаю, что before_save - это то, что вам нужно, но убедитесь, что оно возвращает false, чтобы предотвратить сохранение! – ex0ns