Bulduğum her benzer soruyu okudum ve hala sorunumu çözemiyor.ActionController :: UrlGenerationError, Rota eşleşmiyor
# routes.rb
Rails.application.routes.draw do
resources :lists, only: [:index, :show, :create, :update, :destroy] do
resources :items, except: [:new]
end
end
# items_controller.rb (excerpt)
class ItemsController < ApplicationController
...
def create
@list = List.find(params[:list_id])
...
end
...
end
# items_controller_spec.rb (excerpt)
RSpec.describe ItemsController, type: :controller do
...
let!(:list) { List.create(title: "New List title") }
let(:valid_item_attributes) {
{ title: "Some Item Title", complete: false, list_id: list.id }
}
let!(:item) { list.items.create(valid_item_attributes) }
describe "POST #create" do
context "with valid params" do
it "creates a new item" do
expect {
post :create, { item: valid_item_attributes, format: :json }
}.to change(Item, :count).by(1)
end
end
end
...
end
ve RSpec hatası:
1) ItemsController POST #create with valid params creates a new item
Failure/Error: post :create, { item: valid_item_attributes, format: :json }
ActionController::UrlGenerationError:
No route matches {:action=>"create", :controller=>"items", :format=>:json, :item=>{:title=>"Some Item Title", :complete=>false, :list_id=>1}}
rake routes
çıktı:
list_items GET /lists/:list_id/items(.:format) items#index
POST /lists/:list_id/items(.:format) items#create
edit_list_item GET /lists/:list_id/items/:id/edit(.:format) items#edit
list_item GET /lists/:list_id/items/:id(.:format) items#show
PATCH /lists/:list_id/items/:id(.:format) items#update
PUT /lists/:list_id/items/:id(.:format) items#update
DELETE /lists/:list_id/items/:id(.:format) items#destroy
curl
aracılığıyla varolan listedeki yeni bir öğeyi başarıyla oluşturabilirim, bu da rotanın tamam olduğunu, testimde yanlış bir şey yapmam gerektiğini söyler.
curl -i -X POST -H "Content-Type:application/json" -H "X-User-Email:[email protected]" -H "X-Auth-xxx" -d '{ "item": { "title": "new item", "complete": "false"} }' http://localhost:3000/lists/5/items
Gerçekten kafam karıştı. Rotalarım doğru şekilde kuruldu. ItemsController#create
yöntemi kesinlikle var. Testlerin geri kalanı items_controller_spec.rb
numaranızda sorun yaşamadan geçer.
Belirgin bir şey mi eksik?
Öğütme yolları öğelerinizle ilgili ne söyler? –
Çıktıyı "rake rotaları" dan (yukarıda) eklendi. – RobertJoseph