使用accepts_nested_attributes_for的多嵌套属性不会更新除嵌套对象的第一层之外的任何属性

时间:2010-09-10 01:27:34

标签: ruby-on-rails ruby forms ruby-on-rails-3

我有一个有趣的难题。我有一个程序表,has_many install_validations有很多install_validation_reactions(不要问!)。我将程序模型设置为accepts_nested_attributes_for:install_validations,:allow_destroy =>是,并且install_validations和install_validation_reactions之间相同。构建了一个表单,其中包含所有三个层,这就是我所看到的行为:如果我创建一个新的安装验证,我可以根据需要添加或删除尽可能多的安装验证反应,并且它们将正确保存。如果我更改现有安装验证的任何属性,它将正确保存。但。如果我编辑其中一个现有的嵌套安装验证反应,则更改不会保存,我也无法删除它们。提交的数据看起来很好,所以我不认为这是观点。这是一个例子:

Parameters: {"authenticity_token"=>"1I4eJypbS7FxQkLkkvUqqWGEdLhbR2K/f/qIsvb2sm8=", "package"=>{"name"=>"Adobe Acrobat 7", "platform"=>"PC", "licensed"=>"1", "deployment_stage"=>"1", "source_path"=>"adobe/Acrobat 7/", "executable"=>"install.bat", "install_validations_attributes"=>{"0"=>{"success_value"=>"true", "rule_type"=>"ExecRunning", "rule_parameter"=>"Pork Chops", "install_validation_reactions_attributes"=>{"0"=>{"command"=>"wait", "parameter"=>"30", "id"=>"6", "_destroy"=>"1"}}, "_destroy"=>"false", "id"=>"56"}, "1"=>{"success_value"=>"true", "rule_type"=>"ExecRunning", "rule_parameter"=>"pooka", "install_validation_reactions_attributes"=>{"0"=>{"command"=>"repeat", "parameter"=>"3", "id"=>"7", "_destroy"=>"false"}}, "_destroy"=>"false", "id"=>"57"}}}, "commit"=>"Update", "id"=>"7"}

所以,那看起来是对的,对吗?就像安装验证反应0安装验证0设置为删除,对吗?但事实并非如此。没错,没错。它只是不删除它。有任何想法吗?这些观点,就像我说的,我认为可能很好,因为参数中的数据看起来很好(我想?如果它错了,请告诉我!)。那么,哪些数据可以帮助你精彩的人给我一些见解?

顺便说一下,我正在运行ruby 1.9.1p376和rails 3.0.0.beta3。

1 个答案:

答案 0 :(得分:0)

没关系,我是个白痴。您需要放入一个字段,以便为每个子对象和孙对象提交id字段。完成后,更新可以确定要更新的对象。