Нет совпадений с маршрутами - PullRequest
3 голосов
/ 09 ноября 2011

У меня происходит следующее:

rspec test в users_controller_spec:

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

В моем route.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 Ответ

4 голосов
/ 10 ноября 2011

Мне кажется, что действие show не получает информацию о пользователе, необходимую для получения правильной страницы.Метод assigns просто создает переменную экземпляра.Для вызова user_path потребуется пользовательский макет или объект, чтобы вызов работал правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...