Rails: проверять наличие foo, если bar == 'baz' - PullRequest
7 голосов
/ 20 февраля 2011

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

В принципе, это должно работать так.

class Example < ActiveRecord::Base
  has_one :foo
  has_one :bar

  validates_presence_of :foo
  validates_presence_of :bar, :unless => :foo == Foo.find_by_name('ThisFooDoesntLikeBars')
end

Я не уверен, как построить условие: если здесь нет условия, так как нужно проверить, является ли: foo конкретным объектом или нет.

Как ты делаешь что-то подобное?

Ответы [ 2 ]

14 голосов
/ 20 февраля 2011

:unless принимает Proc

  validates_presence_of :bar, :unless => Proc.new { |ex| ex.foo == Foo.find_by_name('ThisFooDoesntLikeBars') }

: исключением - указывает метод, процедуру или строку, которые необходимо вызвать, чтобы определить, не должна ли происходить проверка (например, так: }). Метод, метод или строка должны возвращать или оценивать истинное или ложное значение.

http://api.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html

3 голосов
/ 20 февраля 2011

Как насчет следующего:

class Example < ActiveRecord::Base
  has_one :foo
  has_one :bar

  validates_presence_of :foo
  validates_presence_of :bar, :unless => Proc.new { |example| example.foo == Foo.find_by_name('ThisFooDoesntLikeBars') }
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...