проверка модели рельсов, пропуск и заказ - PullRequest
4 голосов
/ 28 июня 2010

Есть ли способ заставить мои проверки модели рельсов выполняться в определенном порядке и пропустить определенные проверки, если предыдущие проверки не выполнены.

Например: у меня есть 2 поля ввода start_date и end_date.У меня есть два метода проверки в моей модели

Один из них проверяет, что даты меньше «12/31 / # {Date.today.year + 1}»

 def end_date_in_range
    if self.end_date
      errors.add_to_base("Enter a date before #{Date.today.year + 1}") if self.end_date > Date.parse("12/31/#{Date.today.year + 1}")
    end
 end

У меня естьдругая проверка, которая проходит через даты от начальной до конечной даты

  def
    (self.start_date.to_date .. self.end_date.to_date).inject(0) { |sum, n|  ... }
  end

Теперь, если пользователь вводит конечную дату, такую ​​как 31.12.2010, это не проходит первую проверку, но похоже, что он либо продолжает проверятьследующая проверка или вторая проверка выполняется первой, и в обоих случаях мое приложение зависает при обработке этого запроса.Я хотел бы, чтобы он проверил первую проверку и возвратил ошибку пользователю, а не перешагивал через даты во второй проверке.

спасибо, пепел

Ответы [ 2 ]

1 голос
/ 28 июня 2010

использование elsif

 def end_date_in_range
    if self.end_date
      errors.add_to_base("Enter a date before #{Date.today.year + 1}") if self.end_date > Date.parse("12/31/#{Date.today.year + 1}")
    elsif  #second validation test

    end
 end
0 голосов
/ 12 июня 2011

Вероятно, в этом случае нет необходимости (ответ Салила лучше подходит для этого простого случая), но если у вас есть несколько проверок, которые зависят от одного набора условий, вы также можете добавить предложение «если» к проверке, например:

validates :first_validation
validates :second_validation, :if => :check_conds_now
validates :third_validation,  :if => :check_conds_now

# should return true/false
def check_conds_now
   (cond1 && cond2 && ! cond3)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...