2013-08-24 54 views
0

我使用Angularjs和Ruby on Rails 4編輯對象表單是我的後端。 我得到了下面的錯誤並沒有看到調試它有道:控制器中的參數錯誤

Started PUT "/albums/52109834e9c88c3292000001" for 127.0.0.1 at 2013-08-24 17:24:37 +0400 
Overwriting existing field email. 
Processing by AlbumsController#update as JSON 
Parameters: {"_id"=>{}, "title"=>"Sacred Circuits"} 
MOPED: 127.0.0.1:27017 QUERY  database=aggregator_front_development collection=users selector={"$query"=>{"_id"=>"520bd6cbe9c88ca789000001"}, "$orderby"=>{:_id=>1}} flags=[:slave_ok] limit=-1 skip=0 batch_size=nil fields=nil (0.7932ms) 
Completed 500 Internal Server Error in 63ms 

ArgumentError (wrong number of arguments (2 for 0..1)): 
    app/controllers/albums_controller.rb:18:in `update' 

第18行是更新的功能,它沒有參數。我從Angularjs窗體發送對象來更新它。 albums_controller.rb:

class AlbumsController < ApplicationController 
respond_to :json, :js 

def index 
    respond_with Album.all 
end 

def show 
    respond_with Album.find(params[:id]) 

end 

def create 
    respond_with Album.create(params[:album]) 
end 

def update 
    respond_with Album.update(params[:id],params[:album]) 
end 

def destroy 
    respond_with Album.destroy(params[:id]) 
end 

private 
def album_params 
     params.require(:album).permit(:title) 
end 

end 

我明白,引發ArgumentError(錯誤的參數數目(2 0..1))表示,但不知道去哪裏尋找真正的參數發送。 如何調試這種情況?

+1

問題是你沒有發送一個'相冊'作爲json對象,只是一個'id'和'title'。你能向我們展示負責'$ http.put'的角碼嗎? – mdemolin

+0

其實我裁剪完整的JSON身體。它由_id,標題和相同的參數組成。 –

回答

1

在更新操作中,update是更新active_record實例屬性的實例方法。它只接受一個論據。但是你在這裏傳遞2個參數。這就是它產生錯誤的原因。

更好的方法是首先找到專輯記錄,然後更新它。在更新操作中試用此代碼。

....... 
def update 
    @album = Album.find(params[:id]) #id or whatever key in which you are getting album id 
    @album.update(album_params)  #Use strong parameters while doing mass assignment 
    .... 
end 
....... 
+0

這是一個工作,謝謝! –

+0

對象沒有保存,因爲在我的Angular查詢中有空的「_id」=> {},但那是另一回事。 –