2011-06-25 107 views
2

我一直運行這個錯誤以獲取GET請求以顯示操作。Rspec中的路由錯誤

1) ShopController GET 'show' should be successful 
    Failure/Error: get 'show', :id=>@shop.user.nickname 
    ActionController::RoutingError: 
     No route matches {:id=>"picardo", :controller=>"shop", :action=>"show"} 
    # ./spec/controllers/shop_controller_spec.rb:8:in `block (3 levels) in <top (required)>' 

我的路線是這樣的。

#routes.rb 
    resources :shop, :only=>[:show] 

這是控制器規格:

#shop_controller_spec.rb 
    before(:each) do 
    @shop = Fabricate(:shop) 
    end 
    describe "GET 'show'" do 
    it "should be successful" do 
     get 'show', :id=>@shop.user.nickname 
     response.should be_success 
    end 
    end 

而德控制器:

def show 
    @user = User.find(:first,:conditions=>{:nickname=>params[:id]}) 
    @shop = @user.shop 
    end 
+1

對此有何字?我也有這個最簡單的問題。 –

回答

0

你必須遵循一些規則的軌道。 如果你有一個單一的資源,你必須寫resource :shop,如果你有複數的資源,你必須寫resources :shops。您可以運行rake routes命令查看差異。

你寫的resources :shop和請求發送到ShopController,這是不存在於您的應用程序,因爲我確信該控制器名爲ShopsController。因爲另一個導軌規則是以複數形式命名控制器,而單數形式命名模型。

或者只在線路控制器名稱:resources :shop, :controller => 'shops'