我正在尝试使用相关地址列表更新用户记录,通过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)