Сообщение проверки показывает, но все еще сохраняется? - PullRequest
1 голос
/ 01 ноября 2019

Действительно странно, но я сделал пользовательскую проверку в моей модели. При запуске нескольких проверок форма не сохраняется, и ошибка пользовательской проверки отображается в форме.

Однако ....

Когда пользовательская проверка является единственной проверкой, которая инициируется,форма сохраняет вкл. недействительные данные?

модель extra_guest

 validate :no_dates_overlap

  def no_dates_overlap
    ranges = [] # cache proccessed date ranges

    # iterate over all extra_guest_prices
    extra_guest_prices.each do |egp|
      if ranges.any? { |rng| rng.include?(egp.start_date) || rng.include?(egp.end_date) }
        # if a previous range includes this dates, add the error and break the loop
        egp.errors.add(:start_date, "Dates overlap")
        break
      else
        # else, cache it and check the next
        ranges << (egp.start_date..egp.end_date)
      end
    end
  end
end

Ответы [ 2 ]

1 голос
/ 01 ноября 2019

С рельсов Направляющие

Действительные? Метод проверит, что коллекция ошибок пуста, поэтому ваши пользовательские методы проверки должны добавлять в нее ошибки, если вы хотите, чтобы проверка завершилась неудачей

Необходимо добавить ошибку в массив ошибок записи. Поэтому измените свой код, как показано ниже:

errors.add(:start_date, "Dates overlap")
1 голос
/ 01 ноября 2019

вы не можете добавлять ошибки в extra_guest_prices. Вы должны добавить ошибку в extra_guest.

Попробуйте: self.errors.add(:base, "Dates overlap")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...