我将尝试使用“多对多关联”连接方式,更新一个包含相关“地址”的“用户”记录。下面是我通过javascript发送的请求内容:
这是我在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`哈希表中。
在控制器中,我使用了强参数并像这样更新了
问题在于更新时属性不包含地址ID,因此关联记录未得到更新。
临时解决方案:
我手动解决了这个问题,将地址ID键分配给属性,就像这样:
```ruby attributes[:address_ids] = params[:model][:address_ids] ```
这个代码可以正常工作,但我感觉它并不是应该这样工作的? 为什么
{"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`哈希表中。
在控制器中,我使用了强参数并像这样更新了
User
:attributes = params.require(:user).permit(:id, :name, {:address_ids => []})
@user.update_attributes(attributes)
问题在于更新时属性不包含地址ID,因此关联记录未得到更新。
临时解决方案:
我手动解决了这个问题,将地址ID键分配给属性,就像这样:
```ruby attributes[:address_ids] = params[:model][:address_ids] ```
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
没有自动分配?如何以清晰的方式实现它?