没有路由匹配{:action =>“show”,:controller =>“users”}错误

时间:2011-11-09 17:24:42

标签: ruby-on-rails ruby testing controller routes

我还有以下内容:

users_controller_spec中的rspec测试:

it "should redirect to the user show page" do
    post :create, :user => @attr
    response.should redirect_to(user_path(assigns(:user)))
end

在我的users_controller中,我有以下内容:

def show
  @user = User.find(params[:id])
  @title = @user.name
end

def create
  @title = "Sign up"
  @user = User.new(params[:user])
  if @user.save
    redirect_to @user, :notice => "Signed Up!"
  else
    @title = "Sign up"
    render "new"
  end
end

在我的routes.rb中,我有以下内容:

  Psra::Application.routes.draw do
  resources :users
  resources :sessions

  # Root Route

  root :to => 'pages#home'

  # Pages Routes

  match '/contact', :to => 'pages#contact'
  match '/about',   :to => 'pages#about'
  match '/help',    :to => 'pages#help'
  match '/signup',  :to => 'users#new'

  # Users Route

  match '/signup',  :to => 'users#new'

  #Sessions Routes
  get "logout" => "sessions#destroy", :as => "logout"
  get "login" => "sessions#new", :as => "login"

end

这是我的佣金路线

       users GET    /users(.:format)             {:action=>"index", :controller=>"users"}
             POST   /users(.:format)             {:action=>"create", :controller=>"users"}
    new_user GET    /users/new(.:format)         {:action=>"new", :controller=>"users"}
   edit_user GET    /users/:id/edit(.:format)    {:action=>"edit", :controller=>"users"}
        user GET    /users/:id(.:format)         {:action=>"show", :controller=>"users"}
             PUT    /users/:id(.:format)         {:action=>"update", :controller=>"users"}
             DELETE /users/:id(.:format)         {:action=>"destroy", :controller=>"users"}
    sessions GET    /sessions(.:format)          {:action=>"index", :controller=>"sessions"}
             POST   /sessions(.:format)          {:action=>"create", :controller=>"sessions"}
 new_session GET    /sessions/new(.:format)      {:action=>"new", :controller=>"sessions"}
edit_session GET    /sessions/:id/edit(.:format) {:action=>"edit", :controller=>"sessions"}
     session GET    /sessions/:id(.:format)      {:action=>"show", :controller=>"sessions"}
             PUT    /sessions/:id(.:format)      {:action=>"update", :controller=>"sessions"}
             DELETE /sessions/:id(.:format)      {:action=>"destroy", :controller=>"sessions"}
        root        /                            {:controller=>"pages", :action=>"home"}
     contact        /contact(.:format)           {:controller=>"pages", :action=>"contact"}
       about        /about(.:format)             {:controller=>"pages", :action=>"about"}
        help        /help(.:format)              {:controller=>"pages", :action=>"help"}
      signup        /signup(.:format)            {:controller=>"users", :action=>"new"}
                    /signup(.:format)            {:controller=>"users", :action=>"new"}
      logout GET    /logout(.:format)            {:action=>"destroy", :controller=>"sessions"}
       login GET    /login(.:format)             {:action=>"new", :controller=>"sessions"}

这一切都会导致以下错误:

1) UsersController POST 'create' success should redirect to the user show page
     Failure/Error: response.should redirect_to(user_path(assigns(:user)))
     ActionController::RoutingError:
       No route matches {:action=>"show", :controller=>"users"}
     # ./spec/controllers/users_controller_spec.rb:95:in `block (4 levels) in <top (required)>'

关于我做错的任何想法?

1 个答案:

答案 0 :(得分:4)

我觉得show操作无法获取获取正确页面所需的用户信息。 assigns方法只是创建一个实例变量。 user_path调用需要用户模拟或对象才能使呼叫正常工作。