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 行目は update 関数で、引数はありません。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 (引数の数が間違っています (0..1 の場合は 2)) が意味することは理解していますが、送信される実際の引数を探す場所がわかりません。この状況をデバッグするにはどうすればよいですか?

4

1 に答える 1

1

update アクションの update は、active_record インスタンスの属性を更新するインスタンスメソッドです。1 つの引数のみを受け入れます。ただし、ここでは 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
.......
于 2013-08-24T13:47:18.117 に答える