在Ruby on Rails中,如果在模型中声明accepts_nested_attributes_for
,则autosave
对于子关联设置为true。这有必要吗?
根据我的理解,Rails已经在不声明autosave: true
的情况下验证了所有新的和已更改的孩子。似乎这将涵盖您接受子关联的嵌套属性的所有情况。但是,使用autosave: true
,每次保存父级时,孩子都会得到验证,即使孩子未更改。
这可能会产生重大意想不到的后果,例如,如果您修改子模型的方式使得大量记录无效。
答案 0 :(得分:1)
尝试在关联上设置validate: false
。您可以在http://api.rubyonrails.org/classes/ActiveRecord/AutosaveAssociation.html看到激活autosave
(在我们的情况下通过accepts_nested_attributes_for
)始终验证记录,除非您使用validate: false
答案 1 :(得分:0)
好问题!我自己也遇到了这个惊喜。
我认为Rails只会在自动保存为零(默认值)时保存/验证新的子记录。
在save_belongs_to_association(reflection)
中,如果是新记录或autosave
已启用,它似乎只会保存相关记录。
saved = record.save(:validate => !autosave) if record.new_record? || (autosave && record.changed_for_autosave?)
我总是发现自动保存选项有点令人困惑/不一致......但是现在我们可能因为向后兼容原因而坚持使用它......