验证关联模型并带有条件的模型

3

我有以下 validates_associated 场景

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

当我创建父对象时,只会创建一个子对象(儿子或女儿),而不是两个都创建。现在我的问题是,当我尝试创建带有儿子的父对象时,由于女儿的验证失败,导致验证失败,反之亦然。
是否有办法仅在提交儿子参数时验证儿子,或仅在提交女儿参数时验证女儿?
谢谢。
2个回答

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

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

实际上,这并没有解决我的问题。 如果提供了来自该模型的字段,我们不能验证关联模型吗?谢谢。 - Gagan
抱歉,我现在不明白你的问题在哪里?为什么这个解决方案不能解决你的问题?这个解决方案有什么问题吗? - jigfox
可能我觉得我没有理解你想表达的意思。 进一步的解释可能会有所帮助。 一些结构化的Rails代码会更好。 - Gagan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接