我正在尝试更新 User
记录关联列表 Addresses
,通过连接拥有并属于多个协会 .
我通过 发送的请求正文javascript 是:
{"id":10,"name":"John Smith", "address_ids":[4,8]}
这就是我在 Rails 中得到的内容 服务器日志 :
Started PUT "/api/users/10" for 127.0.0.1 at 2013-10-03 16:30:43 +0200
Processing by Api::UsersController#update as HTML
Parameters: {"id"=>"10", "name"=>"John Smith", "address_ids"=>[4, 8], "user"=>{"id"=>"10", "name"=>"John Smith"}}
上面要注意的是
address_ids
数组没有进入 user
根据日志散列。在 Controller 我正在使用 强参数并更新
User
像这样:attributes = params.require(:user).permit(:id, :name, {:address_ids => []})
@user.update_attributes(attributes)
问题是属性在更新时不包含 address_ids,因此相关的记录没有得到更新。
临时解决方案
我已经解决了手动分配
address_ids
的问题attributes
的 key 从强参数返回后,如下所示:attributes = params.require(:user).permit(:id, :name, {:address_ids => []})
if params.has_key?(:address_ids)
attributes[:address_ids] = params[:address_ids]
end
@user.update_attributes(attributes)
这工作正常,但在我看来这不是它应该如何工作?
为什么是
adderss_ids
没有得到自动分配?如何以明确的方式实现?
最佳答案
如果您希望与用户一起保存地址,您需要确保您的客户端代码发送 address_ids
参数如下:
Parameters: {"user"=>{"id"=>"10", "name"=>"John Smith", "address_ids"=>["4", "8"]}}
输入栏
name
属性将类似于:<input name="user[address_ids][]">
我还注意到您的参数中似乎重复了您的用户属性,因此您可能需要仔细检查您的客户端代码如何生成请求。
关于ruby-on-rails - 如何干净地更新 Rails 4 中的 HABTM 关联列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19162830/