我在以多级嵌套形式更新数据时遇到问题。我使用部分来包含创建和更新 View 的所有字段,并且我在创建时没有问题。只有更新。
基本上结构(简化)是:
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
),那么不要添加这一行,因为它会停止保存您的所有属性。
关于ruby-on-rails - 嵌套表单 & update_attributes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3767525/