Rails - 为什么`accepts_nested_attributes_for`将`autosave`设置为true

Ric*_*nes 5 ruby-on-rails-3 rails-activerecord

在Ruby on Rails中,如果accepts_nested_attributes_for在模型中声明,autosave则为子关联设置为true.这有必要吗?

根据我的理解,Rails将在不声明的情况下验证所有新生儿和变身儿童autosave: true.似乎这将涵盖您接受子关联的嵌套属性的所有情况.但是,autosave: true每次保存父项时,子项现在都会得到验证,即使子项未更改也是如此.

这可能会产生重大意想不到的后果,尤其是在您修改子模型时,大量的记录无效.

Tyl*_*ick 0

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

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

在 中save_belongs_to_association(reflection),看起来它只保存关联记录(如果它记录或autosave已启用)

      saved = record.save(:validate => !autosave) if record.new_record? || (autosave && record.changed_for_autosave?)
Run Code Online (Sandbox Code Playgroud)

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