validates_associated модель с условием - PullRequest
3 голосов
/ 11 августа 2010

У меня есть следующий сценарий validates_associated

class Parent
  include Mongoid::Document
  validates_associated :son
  validates_associated :daughter
end

когда я создаю родителя, сын или дочь создаются только не одновременно. Теперь моя проблема в том, что, когда я пытаюсь создать родителя с сыном, проверка не проходит из-за проверки дочери и наоборот.

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

Спасибо

Ответы [ 2 ]

4 голосов
/ 03 ноября 2010

Вы можете указать опцию: if и проверить, существует ли связанный документ:

class Parent
  include Mongoid::Document
  validates_associated :son, :if => Proc.new { |p| p.son.present? } 
  validates_associated :daughter, :if => Proc.new { |p| p.daughter.present? }
end
3 голосов
/ 11 августа 2010

Почему бы вам не использовать связанный дочерний объект, который имеет атрибут (например, gender), если он является сыном или дочерью.

Child модель (мужской или женский, в зависимости отзначение в gender):

class Child
  include Mongoid::Document
  field :gender, :type => Symbol
  # and more fields as you probably want
  embedded_in :parent, :inverse_of => :child
  # your validation code

  def son?
    gender == :male
  end
  def daughter?
    gender == :female
  end
end

будет встроено в Parent модель:

class Parent
  include Mongoid::Document
  embeds_one :child
  validates_associated :child
end
...