Можно ли группировать валидацию? - PullRequest
0 голосов
/ 11 июня 2010

Я использую множество своих собственных методов проверки для сравнения данных из одной ассоциации в другую. Я заметил, что я постоянно проверяю, что мои ассоциации не равны нулю, прежде чем пытаться что-то им вызвать, но я также проверяю их присутствие, и поэтому я чувствую, что мои нулевые проверки избыточны. Вот пример:

class House < ActiveRecord::Base
  has_one :enterance, :class => Door
  has_one :exit, :class => Door

  validates_presence_of :enterance, :exit

  validate :not_a_fire_hazard
  def not_a_fire_hazard
    if enterance && exit && enterance.location != exit.location
      errors.add_to_base('If there is a fire you will most likely die')
      return false
    end
  end
end

Мне кажется, что я повторяю себя, проверяя наличие входа и выхода в рамках моей собственной проверки.

Есть ли еще "The Rails Way", чтобы сделать это?

1 Ответ

0 голосов
/ 11 июня 2010

Вы также можете рассмотреть возможность использования раздела validates_associated, чтобы проверить, действительны ли связанные объекты.Кроме того, еще один более чистый способ продвижения вперед и обеспечения присутствия входа и выхода (не ноль) заключается в следующем:

validates_presence_of :entrance_or_foo

def entrance_or_foo
    entrance and foo
end

Затем вы можете очистить свой метод пожарной опасности, чтобы он выглядел следующим образом:

 def not_a_fire_hazard
    if enterance.location != foo.location
      errors.add_to_base('If there is a fire you will most likely die')
    end
 end

Вам не нужно возвращать false в приведенном выше определении.

Как отмечает Франсуа в комментариях, exit - это метод, определенный в модуле ядра.,Вам следует переименовать ваш класс, чтобы не путать с определенным в Ruby методом выхода.Я переименовал экземпляры выхода в foo в моем примере кода выше.

...