2017-11-19 4 views
0

マイルートファイル:ルート間の矛盾をどのように処理するのですか?

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に触れずにルートを作ってくれる人を手伝ってくれる人はいますか?

おかげ

+0

なぜ「更新」に 'メンバー 'を使用しますか? 'update'にデフォルトのネストされたリソース(http://guides.rubyonrails.org/routing.html#nested-resources)を使ってみませんか?あなたは何を達成しようとしますか? – spickermann

+0

私はあなたの意見を持っています。それは私が彼に説明しているものです。ちょうどネストされたリソースを使用するだけですが、彼は拒否しています。最後に '/ update'の後に#update関数を呼び出すルートが必要です。 –

+0

プロジェクトマネージャは、内部実装が好きであるという理由だけで、動作中のソリューションを拒否する機能があります。それはなぜ彼のビジネスだって? – spickermann

答えて

0

は、これは私のPMを満たし方法です:

#config/routes 
resources :subscriptions do 
     post 'add', on: :collection 
     put 'pause', on: :member 
     put 'cancel', on: :member 
     put 'resume', on: :member 
end 
resources :subscriptions, only: [] do 
     put 'update', on: :member 
end 

このソリューションでは、働いていたが、これを解決するための別の方法がある場合、私は願っています。

関連する問題