2012-07-03 27 views
10

lo tanto, mantener corriendo en el siguiente error:Rails Routing Error? 'No hay ruta partidos'

No route matches {:action=>"show", :controller=>"users"}

Intenté funcionar rutas rastrillo y puedo ver que existe la ruta:

user   GET   /users/:id(.:format)  users#show 
       PUT   /users/:id(.:format)  users#update 
       DELETE  /users/:id(.:format)  users#destroy 

Pero cada vez que intente visitar la página "https://stackoverflow.com/users/1" (1 es la identificación del usuario), aparece el error anterior. ¿Algunas ideas? ¡Gracias!

Aquí es mi routes.rb:

SampleApp::Application.routes.draw do 
    root to: 'static_pages#home' 

    resources :users 
    resource :sessions, only: [:new, :create, :destroy] 


    match '/signup', to: 'users#new' 
    match '/signin', to: 'sessions#new' 
    match '/signout', to: 'sessions#destroy', via: :delete 

    match '/help', to: 'static_pages#help' 
    match '/about', to: 'static_pages#about' 
    match '/contact', to: 'static_pages#contact' 

Aquí es mi users_controller.rb:

class UsersController < ApplicationController 

    before_filter :signed_in_user, only: [:index, :edit, :update] 
    before_filter :correct_user, only: [:edit, :update] 

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

    def new 
    @user = User.new 
    end 

    def create 
    @user = User.new(params[:user]) 
    if @user.save 
     sign_in @user 
     flash[:success] = "Welcome to the Paper Piazza!" 
     redirect_to @user 
    else 
     render 'new' 
    end 
    end 

    def edit 
    @user = User.find(params[:id]) 
    end 

    def update 
    if @user.update_attributes(params[:user]) 
     flash[:success] = "Profile updated" 
     sign_in @user 
     redirect_to @user 
    else 
     render 'edit' 
    end 
    end 

    def index 
    @users = User.paginate(page: params[:page]) 
    end 

    private 

    def signed_in_user 
     unless signed_in? 
     store_location 
     redirect_to signin_path, notice: "Please sign in." 
     end 
    end 

    def correct_user 
     @user = User.find(params[:id]) 
     redirect_to(root_path) unless current_user?(@user) 
    end 
end 
+0

muestra tu archivo routes.rb –

+0

¿Funciona '/ users/1 /'? – sarnold

+0

No, '/ users/1 /' no parece funcionar ... – user1497531

Respuesta

1

Intente solucionar el error tipográfico:

root :to 'static_pages#home' 

(en lugar de root to:), y moverlo a la última línea del bloque. ¡Y avíseme si eso hace la diferencia!

Lo curioso es que he construido un proyecto fresco con un archivo de enrutamiento que simplemente lee:

RoutingTest::Application.routes.draw do 
    resources :users 
    root :to => "static_pages#home" 
end 

Cuando me encontré con esto en la consola, tengo el mismo error que se está viendo:

>> r = Rails.application.routes ; true 
=> true 
>> r.recognize_path("https://stackoverflow.com/users/1") 
=> ActionController::RoutingError: No route matches "/users" 

... pero cuando corro la misma cosa en un proyecto un poco mayor, me sale:

>> r = Rails.application.routes ; true 
=> true 
>> r.recognize_path("https://stackoverflow.com/users/1") 
=> {:action=>"show", :controller=>"users", :id=>"1"} 

Así que tienen poco confid que lo que te estoy diciendo hará la diferencia. (Aparte de eso, el truco de Rails.application.routes es útil para verificar rutas en la consola!)

+0

Tenga cuidado con los nombres reservados. Intenta no usar static_pages y mira lo que obtienes. – bcackerman

0

Tuve un problema similar, tenía rutas que simplemente devolverían la página raíz, pero aparecerían en rake routes. De acuerdo con un desarrollador compañero para un espacio de nombres específico y para todas las rutas, el root to: (routing) siempre debe ser el último. Esto está en contradicción con la guía de Rails sobre enrutamiento (ver http://guides.rubyonrails.org/routing.html#using-root) que dice que cualquier llamada a root debe estar en la parte superior de tu archivo. Eso definitivamente no estaba funcionando para mí. Interesante ...

Cuestiones relacionadas