Как проверить данные, которые были изменены в before_save - PullRequest
1 голос
/ 25 февраля 2020

У меня есть несколько проверок, которые проверяют Quote объект. После проверки у меня есть before_save обратный вызов, который вызывает API и захватывает больше данных, делает несколько математических вычислений и затем сохраняет недавно вычисленные данные в базе данных.

Я не хочу полностью доверять ответу API, поэтому мне нужно проверить данные, которые я вычисляю.

Обратите внимание, что вызов API в обратном вызове before_save зависит от предыдущих проверок.

Например:

validates :subtotal, numericality: { greater_than_or_equal_to: 0 }
before_save :call_api_and_compute_tax
before_save :compute_grand_total
#I want to validate the tax and grand total numbers here to make sure something strange wasn't returned from the API. 

Мне нужно иметь возможность выдать ошибку проверки, если это возможно, с чем-то вроде:

errors.add :base, "Tax didn't calculate correctly."

Как я могу проверить значения, которые были вычисляется в моих before_save обратных вызовов?

Ответы [ 2 ]

1 голос
/ 25 февраля 2020

вы можете использовать after_validation

after_validation :call_api_and_compute_tax, :compute_grand_total

def call_api_and_compute_tax
  return false if self.errors.any?

  if ... # not true
    errors.add :base, "Tax didn't calculate correctly."
  end
end

....
0 голосов
/ 25 февраля 2020

Вы пытались добавить пользовательские методы проверки перед сохранением? Я думаю, что это хороший подход для проверки ошибок проверки перед вызовом метода сохранения

class Quote < ActiveRecord::Base
  validate :api_and_compute_tax

  private

  def api_and_compute_tax
    # ...API call and result parse
    if api_with_wrong_response?
      errors.add :base, "Tax didn't calculate correctly."
    end
  end
end

Тогда вы должны вызывать его как

quote.save if quote.valid? # this will execute your custom validation
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...