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