0

我有一些名为“组”的实体和一些基本CRUD操作的控制器。我面临的问题是,当我尝试更新(编辑)这个实体时,它没有得到更新。我只是为此使用update_attributes :

def update
  group = Group.find(params[:id])
  group.update_attributes! params[:group]
  render :json => group.to_json()
end

这是我在 WEBrick 控制台中得到的:

Started PUT "/groups/264.json?$$hashKey=00J&_method=PUT&group_id=null&item_sufix=null&key=null&name=ddddddddd&subgroups=" for 127.0.0.1 at 2013-02-25 00:32:03 +0200
Processing by GroupsController#update as JSON
  Parameters: {"$$hashKey"=>"00J", "group_id"=>"null", "item_sufix"=>"null", "key"=>"null", "name"=>"ddddddddd", "subgroups"=>"", "id"=>"264", "group"=>{}}

我想问题是为什么 params[:group] 是空的。但是为什么会发生这种情况,因为我们可以看到所有需要的字段(在这种情况下为:name)都带有请求?在组模型中我确实有attr_accessible :name

至于路由(实际上不知道它们是否与我的问题有关),我的 config/routes.rb 中有此实体的单行:

resources :groups

这是“组”实体的路线摘要:

          groups GET    /groups(.:format)                 groups#index
                 POST   /groups(.:format)                 groups#create
       new_group GET    /groups/new(.:format)             groups#new
      edit_group GET    /groups/:id/edit(.:format)        groups#edit
           group GET    /groups/:id(.:format)             groups#show
                 PUT    /groups/:id(.:format)             groups#update
                 DELETE /groups/:id(.:format)             groups#destroy

Rails 版本:Rails 3.2.11

4

3 回答 3

1

您的 "group"=>{} 应该包装您的其他婴儿车,例如姓名

"group"=>{"name"=>"dddddddddd", "subgroups"=>"", "id"=>"264"}

这告诉我你提交的论点是错误的。

尝试传递您的婴儿车,例如 group[name]=dddddddddd 和 group[id]=264

于 2013-02-24T23:23:24.930 回答
0

您不能使用 Group 作为模型名称,因为它与 ActiveRecord 组冲突。将 Group 更改为 XGroup 并重试。

于 2013-02-24T22:47:55.600 回答
-1

找到解决方案。控制台输出:

Parameters: {"$$hashKey"=>"00J", "group_id"=>"null", "item_sufix"=>"null", "key"=>"null", "name"=>"ddddddddd", "subgroups"=>"", "id"=>"264", "group"=>{}}

说参数是发送的,但它没有说明它们是如何发送的。这就是让我震惊的原因。我认为如果 rails 可以看到这些参数,它们就会以正确的方式发送。当我检查时 - 此参数是常规 POST 参数(可以从我放置请求 url 的原始帖子中看到),而 rails 要求此参数位于请求正文(有效负载)中。这就是为什么内部group仍然是空的。

于 2013-02-25T02:17:14.963 回答