2016-03-23 11 views
1

更新メソッドが必要な引数を取得できない理由を追跡する際に問題が発生しています。私はショーのための同様のテストを持っていて、ペイロードは機能しています。このシナリオでは、問題のルートはinvoice/invoice_id/trip/idです。あなたが私にエラーを見つけさせて、このタイプの問題のトラブルシューティングを将来的にどのように行うべきかについての示唆を与えることができれば嬉しいです。更新メソッドの引数の数が1(2の場合1)で間違っています

これは更新方法です。

def update 
    if @trip.update(@trip.trip_id, trip_params) 
    head :no_content 
    else 
    render json: [@invoice, @trip].errors, status: :unprocessable_entity 
    end 
end 

以下のプライベートメソッドを使用します。

私の失敗テストはこのように見えます。

test "should update trip" do 
    put :update, invoice_id: @invoice.invoice_id, id: @trip, 
    trip: {arrive_airport: @trip.arrive_airport, 
    depart_airport: @trip.depart_airport, 
    departure_date: @trip.departure_date, 
    passenger_count: @trip.passenger_count, 
    passenger_first_name: @trip.passenger_first_name, 
    passenger_last_name: @trip.passenger_last_name} 
assert_response 204 
end 
+0

チェックするだけで、2の場合は1、2の場合はエラー2ですか? dbからロードされたレコードの嘲笑/スタブをしていますか? –

答えて

1

あなたはbefore_actionset_tripを呼び出しているならば、update()メソッドは、この

def update 
    if @trip.update(trip_params) 
    head :no_content 
    else 
    render json: [@invoice, @trip].errors, status: :unprocessable_entity 
    end 
end 

update()のようになりますが、オブジェクトを使用して呼び出すことができるインスタンスメソッドである、あなただけの、それに希望をtrip_paramsを渡す必要がありますそれは助ける!

+0

私は少し解体しています。なぜ私はそれを1つだけ渡すことができなければならないときに2つの議論を求めているのですか?それは私のテストの問題ですか? – CheeseFry

+0

紛らわしい '@trip'はTripのインスタンスではありません。それはリレーションです.ActiveRecord :: Relation.updateは2つのパラメータをとります。 –

+0

@RSB明確な例をありがとう。コードをできるだけ標準的なものにすることは、今後誰かがこれを維持しなければならないのを助けてくれるはずです。 – CheeseFry

1

メソッドが間違った数の引数を渡している別のメソッドを呼び出すときに、このエラーメッセージが表示されることがあります。

1

updateは、唯一の引数としてハッシュをとりますが、updateメソッドでは2つの引数(@ trip.trip_id、trip_params)を渡しています。これが原因で、「更新メソッドの引数の数が1(2の場合)」というエラーメッセージが表示されます。 @RSBが言ったように、trip_paramsを渡すだけでTripインスタンスが更新されます。

0

RSBはお金の上にあった。このケースでは、私の問題がデータベースレベルであることが判明しました。テーブルにプライマリキーがないため、私は @trip = Trip.whereをプライベートメソッドで使用していましたが、これは特定のものではなく可能な行の配列で戻ってきました。私はデータベースレベルでプライマリキーを持つように変更し、プライベートメソッドを更新しました。 RSBのコードがうまくいった!

関連する問題