【发布时间】:2013-02-24 22:43:51
【问题描述】:
我有一些名为“组”的实体和一些基本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)都带有请求?在 Group 模型中,我确实有 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
【问题讨论】:
-
对我来说似乎是传入的请求有问题。是什么发送的,为什么看起来这么奇怪?
-
@Jesper,我从 AngularJS 应用程序(AJAX 请求)发送它,但我想谁以及如何发送它并不重要。请求有什么问题?如您所见,我发送了整个对象,但由于
name出现在请求中并出现在 attr_accessible 中 - 为什么它在 params[:group] 中不存在? -
您应该将对象数据包装在
"group" => {data: "goes here"}中。我在进入您的服务器的 PUT 请求中看不到任何此类内容。这就是问题所在。
标签: ruby-on-rails activerecord rails-activerecord