带条件的validates_associated模型

时间:2010-08-11 12:45:17

标签: ruby-on-rails validation associations mongoid

我有以下validates_associated场景

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

当我创建父母时,儿子或女儿的任何一个都不会同时创建。 现在我的问题是,当我尝试用子创建父级时,验证因子女验证而失败,反之亦然。

有什么方法可以在张贴儿子参数时只验证儿子,或者在张贴女儿参数时仅验证女儿

由于

2 个答案:

答案 0 :(得分:4)

您可以提供: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

答案 1 :(得分:3)

为什么不使用具有属性(即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