6

在 Ruby on Rails 中,如果您accepts_nested_attributes_for在模型中声明,autosave则将子关联设置为 true。这是必要的吗?

据我了解,Rails 已经验证了所有新的和更改的子节点,而无需声明autosave: true. 似乎这将涵盖您接受子关联的嵌套属性的所有情况。但是,autosave: true现在每次保存父级时都会验证子级,即使子级未更改

这可能会产生重大的意外后果,尤其是当您修改子模型时,导致大量记录无效。

4

2 回答 2

1

尝试设置validate: false关联。您可以从http://api.rubyonrails.org/classes/ActiveRecord/AutosaveAssociation.html看到激活autosaveaccepts_nested_attributes_for在我们的例子中是通过)总是验证记录,除非您使用validate: false

于 2016-07-19T22:51:14.320 回答
0

好问题!我自己也遇到了这个惊喜。

我认为 Rails 只会在 autosave 为 nil(默认值)时保存/验证新的子记录。

save_belongs_to_association(reflection),它看起来像它只保存关联的记录,如果它是一个的记录或autosave启用

      saved = record.save(:validate => !autosave) if record.new_record? || (autosave && record.changed_for_autosave?)

我一直发现自动保存选项有点令人困惑/不一致......但现在我们可能出于向后兼容性的原因坚持使用它......

于 2015-01-06T01:12:18.153 回答