我有一种情况(解析),我需要从子记录开始,添加他们的逻辑父,然后在验证子和父项时保存。
有没有一种标准的方法来处理这个Rails?
考虑到以下关系:
has_many
子,validates :child, presence: true
belongs_to
家长我看到的内容如下:
p = Parent.new # with a missing required attribute
c = Child.new
c.parent = p # or c.parents << p, this isn't important
p.valid? # false
c.valid? # true
c.save # true
因此,当新关联的父对象出错时,让我保存孩子。
有解决方案吗?我认为,当交换对象时,这可以正常工作,正如预期的那样,它们之间存在关系。
但是,在这种情况下,我不能从父母开始,因为它可能已经存在,我为此做了一个单独的find_or_create
。在这种情况下,从子记录开始更合乎逻辑。
Google / SO搜索没有帮助。
答案 0 :(得分:1)
您可以在子模型中添加custom validator
,如下所示:
validate parent_model_validate
然后,在同一(子)模型中添加parent_model_validate
方法:
def parent_model_validate
unless self.parent.valid?
errors.add(:child_model, 'Parent is not valid')
end
end
如果父模型无效,此验证器将确保不会保存子模型。
答案 1 :(得分:1)
查看validates_associated
here。
(请注意不要在两端使用它)