Как задать очередность валидаций в Ruby on Rails?

validates_presence_of :count
validates :count, numericality: true
validates :count, numericality: { only_integer: true,greater_than: 0}

validate :validate_max_count_sklad_tovar

Задал две валидации, вторая, которая создана мной выполняется с самого начала, а необходимо чтобы после первой по списку. Каким обращом это сделать?
  • Вопрос задан
  • 200 просмотров
Пригласить эксперта
Ответы на вопрос 2
@vsuhachev
Никак. Ваш код не должен быть завязан на порядок валидаций. Внутри validate_max_count_sklad_tovar проверьте, является ли count числом и только тогда проводите проверку по складу.
Ответ написан
Комментировать
savio
@savio Автор вопроса
Сделал так:
class InetSklad < ActiveRecord::Base

  validates :tovar_id, presence: true
  validates :count, presence: true
  validates :count, numericality: true
  validates :count, numericality: { only_integer: true,greater_than: 0}
  
  validate :validate_max_count_sklad_tovar, :if => Proc.new { |a| a.dependent_attributes_valid? }

def dependent_attributes_valid?
    [:tovar_id, :count].each do |field|
      self.class.validators_on(field).each { |v| v.validate(self) }
      if self.errors.messages[field].present?
        self.errors.messages[field]=[self.errors.messages[field][0]] if self.errors.messages[field].kind_of?(Array)
        return false
      end
    end
    return true
  end

работает!
подсмотрел тут
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы