【问题标题】:has_many :autosave => true skips validation when saving childrenhas_many :autosave => true 保存孩子时跳过验证
【发布时间】:2012-07-03 23:51:48
【问题描述】:
在 Rails 2 和 Rails 3 中,如果 :autosave => true 是一个 has_many 关联,则循环遍历集合并在每个子关联上调用 save(:validate => false)。这是为什么?我们需要为该子对象运行 before_validation 回调,但它不会因为它是跳过验证的保存。
有什么好办法解决这个问题?跳过验证的目的是什么?
任何帮助将不胜感激!谢谢!
【问题讨论】:
标签:
ruby-on-rails
ruby-on-rails-3
【解决方案1】:
验证做运行。有一个验证阶段和一个保存阶段。 AutoSave 尝试同时为两个模型执行这两个阶段。因此,在保存父模型时,验证父模型,然后验证它的自动保存子模型。验证通过后,会发生保存阶段,即保存父模型并保存子模型(但跳过验证)。原因是验证已经运行。
我在 before_save 回调期间尝试在父级内部构建子模型时遇到了问题。因此,在验证阶段不会验证关联的对象。