嵌套表单和update_attributes

bre*_*ter 4 ruby-on-rails nested-forms

我无法更新多级嵌套表单中的数据.我使用partials来包含创建和更新视图的所有字段,并且我没有创建问题.只有更新.

基本上结构(简化)是:

user has_one profile
profile has_many addresses

form_for @user do |u|
  u.fields_for :profile do |p|
    p.fields_for :addresses do |a|
Run Code Online (Sandbox Code Playgroud)

就像我说的,创建用户,配置文件和地址工作正常.直到我试图更新我发现问题.我没有收到错误,它实际上显示它已成功更新.它实际上正确地更新了用户和配置文件字段,而不是地址字段.

这里是堆栈跟踪更新的参数.(再次,总结和格式化)

Parameters: {"controller"=>"profiles", "action"=>"update", "_method"=>"put", "id"=>"1", 
  "user"=>{"login" => "username",
    "profile_attributes"=>{"first_name"=>"Admin",
      "addresses_attributes"=>{
        "0"=>{"address"=>"123 Address Ave.", "city"=>"Cityville", "state"=>"CA"}
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我能找到的所有文档只显示1个嵌套表单,所以我不确定我是否正确使用update_attributes超过1级深度.

有什么想法吗?

Gar*_*eth 6

您是否attr_accessible在模型中的任何位置使用,将允许进行批量分配的字段列入白名单?如果是这样,那么你还需要添加

attr_accessible :address_attributes
Run Code Online (Sandbox Code Playgroud)

允许传递这些属性update_attributes.

如果您还没有使用attr_accessible(或者不推荐使用姐妹attr_protected),请不要添加此行,因为它会阻止您保存的所有其他属性.