0

我有一个模型叫做“新手”。routes.rb 文件如下所示:

  Myapp::Application.routes.draw do
  resources :newbies

  root to: 'static_pages#home'
  match '/about',   to: 'static_pages#about'

控制器就像:

  class NewbiesController < ApplicationController

    def show
      @newbie = Newbie.find(params[:id])
    end
    ......
  end

当我写测试时:

require 'spec_helper'

describe "Newbie pages" do
  subject { page }
  describe "profile page" do
    let(:newbie) { FactoryGirl.create(:newbie) }
    before { visit newbie_path(newbie)}

    it { should have_selector('h1',    text: newbie.name) }
    it { should have_selector('title', text: newbie.name) }
  end
end

它总是失败 说:

 1) Newbie pages profile page 
 Failure/Error: before { visit newbie_path(newbie)}
 NoMethodError:
   undefined method `newbie_path' for #       <RSpec::Core::ExampleGroup::Nested_2::Nested_2:0x007f97f7f33068>
 # ./spec/requests/newbie_pages_spec.rb:16:in `block (3 levels) in <top (required)>'

 2) Newbie pages profile page 
 Failure/Error: before { visit newbie_path(newbie)}
 NoMethodError:undefined method `newbie_path' for 

我认为资源:新手会创建像 newbie_path 这样的辅助方法,但为什么它说未定义的方法?

谢谢

4

1 回答 1

0

当你运行 rake 路由时

为新手资源生成的路线与您期望的路线完全不同。

newbies GET    /newbies(.:format)
{:action=>"index", :controller=>"newbies"}
         POST   /newbies(.:format)
{:action=>"create", :controller=>"newbies"}

new_newby GET    /newbies/new(.:format)
{:action=>"new", :controller=>"newbies"}

 edit_newby GET    /newbies/:id/edit(.:format)
{:action=>"edit", :controller=>"newbies"}

newby GET    /newbies/:id(.:format)
{:action=>"show", :controller=>"newbies"}
 PUT    /newbies/:id(.:format)
{:action=>"update", :controller=>"newbies"}

DELETE /newbies/:id(.:format)
{:action=>"destroy", :controller=>"newbies"}

所以你应该使用

newby_path(newbie)
于 2012-04-17T06:00:34.763 回答