2013-04-13 16 views
2

我創建與此路由的安裝引擎:RoutingError

Rails.application.routes.draw do 
    scope module: :minimalist_cms do 
    root to: "pages#show" 
    get ':id', to: "pages#show" 
    resources :pages 
    resources :page_parts 
    end 
end 

我有此測試:

require 'spec_helper' 

module MinimalistCms 
    describe PagesController, type: :controller do 

    let(:page) { stub_model(Page) } 

    describe :show do 
     context "when there is a page" do 
     it 'should find by slug' do 
      Page.should_receive(:find_by_slug).and_return(page) 
      get :show, id: 'test' 
     end 
     end 
    end 
    end 
end 

而當I型rake routes我有這樣的結果:

  root  /       minimalist_cms/pages#show 
       GET /:id(.:format)     minimalist_cms/pages#show 
     pages GET /pages(.:format)    minimalist_cms/pages#index 
       POST /pages(.:format)    minimalist_cms/pages#create 
     new_page GET /pages/new(.:format)   minimalist_cms/pages#new 
    edit_page GET /pages/:id/edit(.:format)  minimalist_cms/pages#edit 
      page GET /pages/:id(.:format)   minimalist_cms/pages#show 
       PUT /pages/:id(.:format)   minimalist_cms/pages#update 
       DELETE /pages/:id(.:format)   minimalist_cms/pages#destroy 
    page_parts GET /page_parts(.:format)   minimalist_cms/page_parts#index 
       POST /page_parts(.:format)   minimalist_cms/page_parts#create 
new_page_part GET /page_parts/new(.:format)  minimalist_cms/page_parts#new 
edit_page_part GET /page_parts/:id/edit(.:format) minimalist_cms/page_parts#edit 
    page_part GET /page_parts/:id(.:format)  minimalist_cms/page_parts#show 
       PUT /page_parts/:id(.:format)  minimalist_cms/page_parts#update 
       DELETE /page_parts/:id(.:format)  minimalist_cms/page_parts#destroy 

它的工作原理,但如果我改變這一點,在我的引擎:

MinimalistCms::Engine.routes.draw do 
    scope module: :minimalist_cms do 
    root to: "pages#show" 
    get ':id', to: "pages#show" 
    resources :pages 
    resources :page_parts 
    end 
end 

而且在我的應用程序:安裝在我的虛擬應用

這樣的:

Dummy::Application.routes.draw do 
    mount MinimalistCms::Engine, at: '/' 
end 

我有這樣的錯誤:

Failure/Error: get :show, id: 'test' 
ActionController::RoutingError: 
    No route matches {:id=>"test", :controller=>"minimalist_cms/pages", :action=>"show"} 

而且rake routes結果似乎是相似的:

minimalist  /       MinimalistCms::Engine 
      root  /       minimalist_cms/pages#show 
       GET /:id(.:format)     minimalist_cms/pages#show 
     pages GET /pages(.:format)    minimalist_cms/pages#index 
       POST /pages(.:format)    minimalist_cms/pages#create 
     new_page GET /pages/new(.:format)   minimalist_cms/pages#new 
    edit_page GET /pages/:id/edit(.:format)  minimalist_cms/pages#edit 
      page GET /pages/:id(.:format)   minimalist_cms/pages#show 
       PUT /pages/:id(.:format)   minimalist_cms/pages#update 
       DELETE /pages/:id(.:format)   minimalist_cms/pages#destroy 
    page_parts GET /page_parts(.:format)   minimalist_cms/page_parts#index 
       POST /page_parts(.:format)   minimalist_cms/page_parts#create 
new_page_part GET /page_parts/new(.:format)  minimalist_cms/page_parts#new 
edit_page_part GET /page_parts/:id/edit(.:format) minimalist_cms/page_parts#edit 
    page_part GET /page_parts/:id(.:format)  minimalist_cms/page_parts#show 
       PUT /page_parts/:id(.:format)  minimalist_cms/page_parts#update 
       DELETE /page_parts/:id(.:format)  minimalist_cms/page_parts#destroy 

應用程序的行爲沒有改變,它可以工作,但測試失敗。

您有解決方案嗎?

回答

0

可能不是使用範圍,而是嘗試使用正常方式(不帶範圍)寫入路由。

現在在聲明從Rails :: Engine繼承的引擎的文件中添加isolated_namespace。

Module MinimalistCms 
    Class Engine < Rails::Engine 
    isolate_namespace MinimalistCms 
    end 
end 

請嘗試立即運行您的測試。