マイルートファイル:ルート間の矛盾をどのように処理するのですか?
resources :users do
...
resources :subscriptions do
post 'add', on: :collection
put 'pause', on: :member
put 'cancel', on: :member
put 'resume', on: :member
put 'update', on: :member
end
...
end
私はのテスト要求にしようとしているRSpecのを使用してサブスクリプションの:show
ためをGETそれは、私はそれが自動的に/update
を追加していることに気づいた
ActionController::RoutingError:
No route matches [GET] "/api/v1/users/1774/subscriptions/257/update"
私
を与えますそれの終わりまで これは私のテストで:describe "GET /api_v1/subscriptions/:id" do
it "get subscription details" do
get api_v1_user_subscription_path(@user1.id,@subscription1.id), headers: admin_headers
expect(response).to be_success
expect(response.content_type).to eq("application/json")
end
end
そして、これは、サブスクリプションのための私のrake routes
です:
add_api_v1_user_subscriptions POST /api/v1/users/:user_id/subscriptions/add(.:format) api/v1/subscriptions#add
pause_api_v1_user_subscription PUT /api/v1/users/:user_id/subscriptions/:id/pause(.:format) api/v1/subscriptions#pause
cancel_api_v1_user_subscription PUT /api/v1/users/:user_id/subscriptions/:id/cancel(.:format) api/v1/subscriptions#cancel
resume_api_v1_user_subscription PUT /api/v1/users/:user_id/subscriptions/:id/resume(.:format) api/v1/subscriptions#resume
api_v1_user_subscription PUT /api/v1/users/:user_id/subscriptions/:id/update(.:format) api/v1/subscriptions#update
api_v1_user_subscriptions GET /api/v1/users/:user_id/subscriptions(.:format) api/v1/subscriptions#index
POST /api/v1/users/:user_id/subscriptions(.:format) api/v1/subscriptions#create
GET /api/v1/users/:user_id/subscriptions/:id(.:format) api/v1/subscriptions#show
PATCH /api/v1/users/:user_id/subscriptions/:id(.:format) api/v1/subscriptions#update
PUT /api/v1/users/:user_id/subscriptions/:id(.:format) api/v1/subscriptions#update
DELETE /api/v1/users/:user_id/subscriptions/:id(.:format) api/v1/subscriptions#destroy
私はapi_v1_user_subscription_path
を使用して、問題の原因ですが、私はそれを作ることができる方法を理解していなかったことに気づきました問題は最後に/update
を含むルートがput
であり、私はget
リクエストを送信しています。
私はこの問題のための2つの解決策だ:サブスクリプションリソース内update
ルートの名前を変更する
1-およびresources :subscription
が私たちのためにそれを作るためには、update
ルートを削除する
2-働いていたが、最後に/update
はありません。
問題は私のPM(プロジェクトマネージャー)が両方の解決策を受け入れなかったことです。 put 'update', on: :member
に触れずにルートを作ってくれる人を手伝ってくれる人はいますか?
おかげ
なぜ「更新」に 'メンバー 'を使用しますか? 'update'にデフォルトのネストされたリソース(http://guides.rubyonrails.org/routing.html#nested-resources)を使ってみませんか?あなたは何を達成しようとしますか? – spickermann
私はあなたの意見を持っています。それは私が彼に説明しているものです。ちょうどネストされたリソースを使用するだけですが、彼は拒否しています。最後に '/ update'の後に#update関数を呼び出すルートが必要です。 –
プロジェクトマネージャは、内部実装が好きであるという理由だけで、動作中のソリューションを拒否する機能があります。それはなぜ彼のビジネスだって? – spickermann