Rspec中的RoutingError

时间:2011-06-25 19:26:05

标签: ruby-on-rails routing rspec

我继续遇到此错误,要求GET请求显示操作。

  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 :(得分:0)

你必须遵循一些铁路规则。 如果你有一个单一的资源,你必须写resource :shop,如果你有多个资源,你必须写resources :shops。您可以运行rake routes命令来查看差异。

您写了resources :shop并请求发送到您的应用程序中不存在的ShopController,因为我确信该控制器名为ShopsController。因为另一个rails规则是以复数形式命名控制器,并以单数形式命名模型。

或者只是在路线中写一个控制器名称:resources :shop, :controller => 'shops'