2013-02-24 82 views
0

我有一些实体名为'组'和控制器的一些basick CRUD行动。我面临的问题是,当我试图更新(编辑)这个实体时,它不会被更新。我只是用update_attributes此:Rails,实体不更新

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 [:组]自带空。但为什么会发生这种情况,因为我们可以看到所有必需的字段(在这种情况下是名称)都带有请求?在组模式我有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

+0

对我来说,它似乎是传入的请求有问题。什么是发送它,为什么它看起来很奇怪? – Jesper 2013-02-24 23:04:06

+0

@Jesper,我从AngularJS应用程序(AJAX请求)发送它,但我想谁和发送它并不重要。请求有什么问题?正如你所看到的,我发送整个对象,但自从'name'出现在请求中并且出现在attr_accessible中 - 为什么它不存在于params [:group]中? – SET 2013-02-24 23:08:50

+0

你应该把对象数据包装在一个''group“=> {data:”go here“}中。我看不到进入你的服务器的PUT请求。这是错的。 – Jesper 2013-02-24 23:32:56

回答

-1

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

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

说参数发送,但它并没有说什么他们如何发送。这是让我震惊的事情。我认为,如果轨道可以看到这个参数比他们正确的方式发送。当我检查 - 这个参数是普通的POST参数(它可以从我原来的帖子中看到,我把请求url),而rails需要这个参数在请求体(有效载荷)。这就是为什么内部group保持空置。

+0

其实我不知道什么是最好的做法 - 我应该更新我的原始帖子解决方案或创建单独的答案... – SET 2013-02-25 02:21:00

+0

为什么有downvote为? – SET 2013-02-26 12:35:29

0

,因为它与ActiveRecord的摹冲突,那么你不能使用组的型号名称roup。将组更改为XGroup,然后重试。

+0

,但它在同一个控制器的'create'方法中工作正常:'group = Group.new params [:group]' – SET 2013-02-24 22:50:33

+0

它失败的方式是神秘而难以理解的,它可能不是你的问题,但值得一试只想确认一下。 – RadBrad 2013-02-24 22:52:09

+0

我有另一个实体(模型/控制器)命名'制造商'与同样的问题。然而,我想你猜 - 重命名集团伊格尔集团没有帮助我一点点,除了它需要5分钟的生活( – SET 2013-02-24 23:17:55

1

你 “团”=> {}应该换你的其他婴儿车,如姓名

“组”=> { “名”=> “DDDDDDDDD”, “分组”=> “”,“ID “=>”264“}

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

尝试通过你的婴儿车类似基团[名称] = DDDDDDDDD和组[ID] = 264

+0

如果我做实体创建的请求,我传递参数,它的工作原理 - 参数:{“name”=>“sssdasdasd”,“group”=> {“name”=>“sssdasdasd”}}' – SET 2013-02-24 23:30:55

+0

以及我可以告诉你,当你的更新/创建操作通过params [:group]时,它只会查找那个散列,除非这些属性在那里没有使用它们。顶级属性将被忽略,所以没有理由像这样传递它们。 Rails如何知道这个顶级名称的值是属于什么的? – 2013-02-24 23:34:47

+0

2013-02-25 00:32:03 +0200 开始PUT“/groups/264.json?$$hashKey=00J&_method=PUT&group_id=null&item_sufix=null&key=null&name=ddddddddd&subgroups=”用于127.0.0.1告诉你什么问题是。 – 2013-02-24 23:39:20