gpt4 book ai didi

ruby-on-rails - 如何干净地更新 Rails 4 中的 HABTM 关联列表?

转载 作者:行者123 更新时间:2023-12-04 07:23:32 25 4
gpt4 key购买 nike

我正在尝试更新 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com