ruby-on-rails – 嵌套表单和update_attributes

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

基本上结构(简化)是:

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|

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

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

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

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

有什么想法吗?

解决方法

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

attr_accessible :address_attributes

允许将这些属性传递给update_attributes.

如果你还没有使用attr_accessible(或者不推荐使用attr_protected的姐妹),那么不要添加这一行,因为它会阻止所有你保存的属性.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...