加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 19:10:51 所属栏目:百科 来源:网络整理
导读:我正在尝试使用相关地址列表更新用户记录,通过has连接并属于多个关联. 我通过javascript发送的请求正文是: {"id":10,"name":"John Smith","address_ids":[4,8]} 这是我在Rails服务器日志中得到的: Started PUT “/api/users/10” for 127.0.0.1 at 2013-10
我正在尝试使用相关地址列表更新用户记录,通过has连接并属于多个关联.

我通过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数组没有根据日志将其变成用户哈希.

在控制器中,我使用强参数并像这样更新用户:

attributes = params.require(:user).permit(:id,:name,{:address_ids => []}) 
@user.update_attributes(attributes)

问题是属性在更新时不包含address_ids,因此关联的记录不会更新.

临时解决方案

我已经解决了这个问题,在他们从强参数检查返回后手动将address_ids键分配给属性,如下所示:

attributes = params.require(:user).permit(:id,{:address_ids => []})
if params.has_key?(:address_ids)   
  attributes[:address_ids] = params[:address_ids] 
end
@user.update_attributes(attributes)

这工作正常,但在我看来这不是它应该如何工作?
为什么adderss_ids没有自动分配?如何以明确的方式实施?

解决方法

如果您需要使用User保存的地址,请确保客户端代码发送address_ids参数,如下所示:
Parameters: {"user"=>{"id"=>"10","name"=>"John Smith","address_ids"=>["4","8"]}}

输入字段名称属性将类似于:

<input name="user[address_ids][]">

我还注意到您的参数中似乎重复了您的用户属性,因此您可能需要仔细查看客户端代码生成请求的方式.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读