私はこのルートを持っています:
resources :items, path: 'feed', only: [:index], defaults: { variant: :feed }
これは、api および v1 名前空間にネストされています。(request_source パラメータは Api 名前空間から取得されます)。
コントローラーの仕様で index アクションをテストしたいと考えています。私は試した:
get :feed, community_id: community.id, :request_source=>"api"
は機能しません。
get :index, community_id: community.id, :request_source=>"api", variant: 'feed'
言って:
ActionController::RoutingError:
No route matches {:community_id=>"14", :request_source=>"api", :variant=>"feed", :controller=>"api/v1/items"}
- - - -編集 - - - - -
バリアントを使用してパラメーターをコントローラーに送信する理由は、これらすべてのルートがあるためです。
resources :items, path: 'feed', only: [:index], defaults: { variant: 'feed' }
resources :items, path: 'popular', only: [:index], defaults: { variant: 'popular' }
次に、ItemsController に、インデックス アクションの前にフィルター「get_items」があります。
def get_items
if params[:variant] == 'feed'
....
elsif params[:variant] == 'popular'
....
end