Rails,实体不更新

时间:2013-02-24 22:43:51

标签: ruby-on-rails activerecord rails-activerecord

我有一些名为'Group'的实体和一些basick 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]变空了。但是为什么会发生这种情况,因为我们可以看到所有需要的字段(在这种情况下是名称)都带有请求?在群组模型中,我确实有attr_accessible :name

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

resources :groups

这里是'Group'实体的路线摘要:

          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

3 个答案:

答案 0 :(得分:1)

你的"群组" => {}应该包装你的其他婴儿车如名称

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

告诉我你提交错误的论据。

尝试传递你的婴儿车,如组[name] = ddddddddd和group [id] = 264

答案 1 :(得分:0)

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

答案 2 :(得分:-1)

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

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

说参数已发送,但它没有说明他们的发送方式。这就是让我失望的原因。我认为如果rails可以看到这些参数而不是它们以正确的方式发送。当我检查 - 这个参数是常规的POST参数(从我的原始帖子可以看到我放置请求URL),而rails需要这个参数在请求体(有效负载)。这就是内部group仍为空的原因。