2013-02-24 85 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