代码之家  ›  专栏  ›  技术社区  ›  jasonpgignac

使用accepts_nested_attributes_for的多嵌套属性只更新嵌套对象的第一层

  •  0
  • jasonpgignac  · 技术社区  · 14 年前

    我有个有趣的难题。我有一个有很多安装验证的程序表,有很多安装验证的反应(不要问!).I将程序模型设置为接受:install_validations、:allow_destroy=>true的嵌套属性,以及install_validations和install_validation_反应之间的相同属性。构建了一个包含所有三层的表单,下面是我看到的行为:如果我创建了一个新的安装验证,我可以添加或删除尽可能多的安装验证反应,它们将正确保存。如果更改现有安装验证的任何属性,它将正确保存。但是。如果我编辑一个现有嵌套安装验证反应,这些更改不保存,并且我也不能删除它们。提交的数据看起来不错,所以我不认为是视图。下面是一个例子:

    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"}
    

    所以,看起来不错,对吧?就像install validation 0的install validation reaction 0被设置为delete一样,对吧?但是没有。没有错误,没有。它只是没有删除它。有什么想法吗?这些视图,就像我说的,我认为可能很好,因为参数中的数据看起来很好(我认为?如果是错的,告诉我!)那么,什么数据能帮助你们这些优秀的人给我一些启示呢?

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

    1 回复  |  直到 14 年前
        1
  •  0
  •   jasonpgignac    14 年前

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