【问题标题】:RoutingError in RspecRspec中的路由错误
【发布时间】:2011-06-25 19:26:04
【问题描述】:

我一直在遇到此错误以获取 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

【问题讨论】:

  • 对此有任何消息吗?我也遇到了这个最简单的问题。

标签: ruby-on-rails routing rspec


【解决方案1】:

你必须遵守一些 Rails 规则。 如果你有一个单数资源,你必须写resource :shop,如果你有复数资源,你必须写resources :shops。您可以运行rake routes 命令查看差异。

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

或者只是在路由中写一个控制器名称:resources :shop, :controller =&gt; 'shops'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-08
    • 2017-04-02
    • 1970-01-01
    相关资源
    最近更新 更多