[英]` No route matches` error for Nested Resources Controller Spec - Rails, Rspec
[英]Rails nested controller - error: No route matches
Rails 5.2.1 RSpec 3.8
我正在嘗試使用嵌套控制器構建REST API。 我收到一個錯誤:
No route matches {:action=>"index", :controller=>"playlists/playlist_items", :format=>:json, :playlist=>60}
這是我的routes.rb:
Rails.application.routes.draw do
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
resources :playlists do
resources :playlist_items, controller: 'playlists/playlist_items'
end
resources :playlist_items
resources :artists
resources :tracks
end
這是rake routes
的輸出:
Prefix Verb URI Pattern Controller#Action
playlist_playlist_items GET /playlists/:playlist_id/playlist_items(.:format) playlists/playlist_items#index
POST /playlists/:playlist_id/playlist_items(.:format) playlists/playlist_items#create
playlist_playlist_item GET /playlists/:playlist_id/playlist_items/:id(.:format) playlists/playlist_items#show
PATCH /playlists/:playlist_id/playlist_items/:id(.:format) playlists/playlist_items#update
PUT /playlists/:playlist_id/playlist_items/:id(.:format) playlists/playlist_items#update
DELETE /playlists/:playlist_id/playlist_items/:id(.:format) playlists/playlist_items#destroy
... etc ...
這是測試失敗的地方:
describe Playlists::PlaylistItemsController do
describe "GET #index" do
before do
@playlist = create :playlist, { date: '2000-01-01' }
get :index, params: { playlist: @playlist.id, format: :json }
end
it "returns http success" do
expect(response).to have_http_status(:success)
end
end
end
該錯誤抱怨沒有路線匹配
{:action=>"index", :controller=>"playlists/playlist_items", :format=>:json, :playlist=>60}
但據我所知,這條與rake routes
完全一致的rake routes
是:
playlist_playlist_items GET /playlists/:playlist_id/playlist_items(.:format) playlists/playlist_items#index
我想念什么?
該參數稱為playlist_id
而不是playlist
。
describe Playlists::PlaylistItemsController do
describe "GET #index" do
before do
@playlist = create :playlist, { date: '2000-01-01' }
get :index, params: { playlist_id: @playlist.id, format: :json }
end
it "returns http success" do
expect(response).to have_http_status(:success)
end
end
end
請注意,控制器應返回401 CREATED響應。
您還可以通過添加module
選項將資源嵌套在module
:
resources :playlists do
resources :playlist_items, module: :playlists
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.