Rails - проверка поля в другой модели - PullRequest
2 голосов
/ 24 февраля 2011

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

// Мои модели

class Course < ActiveRecord::Base
  has_many :locations, :dependent => :destroy
  accepts_nested_attributes_for :locations
end

class Location < ActiveRecord::Base
  belongs_to  :course
end

Курс может иметь много мест (штат, город и т. Д.), А также дату начала.Я хочу, чтобы что-то вроде: «Разрешить, чтобы location.start_date был пустым ТОЛЬКО ЕСЛИ course.format == 'DVD'"

В моей модели Location я пробовал что-то вроде:

validates_presence_of   :start_date,
                        :message => "Start Date can't be blank",
                        :allow_blank => false,
                        :if => Proc.new { |course| self.course.format != 'DVD' }

Затем, когда я использую это, я получаю: закрытый метод 'format' для nil: NilClass

Не уверен, что я на правильном пути.

Спасибо!

1 Ответ

0 голосов
/ 24 февраля 2011

Proc, переданное предложению if, передает в качестве параметра в блок экземпляр текущего проверяемого объекта. Итак, то, что у вас есть |course|, действительно |location|. Попробуйте что-то вроде следующего и посмотрите, будет ли это то, что вы хотите:

validates_presence_of   :start_date,
                        :message => "Start Date can't be blank",
                        :allow_blank => false,
                        :if => Proc.new { |location| location.course.format != 'DVD' }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...