2012-07-03 7 views
10

Quindi io continuo correre nel seguente errore:Errore di instradamento dei binari? 'Nessuna corrispondenza route'

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

Ho provato a fare funzionare percorsi rake e posso vedere che il percorso esista:

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

Ma ogni volta che provo in visita la pagina "https://stackoverflow.com/users/1" (1 essendo l'id utente), ottengo l'errore sopra riportato. Qualche idea? Grazie!

Ecco la mia 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' 

Ecco la mia 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

mostrare il file routes.rb –

+0

Fa '/ utenti/1 /' il lavoro? – sarnold

+0

No, '/ users/1 /' sembra non funzionare .. – user1497531

risposta

1

Prova fissare l'errore di battitura:

root :to 'static_pages#home' 

(piuttosto che root to:), e spostandolo fino all'ultimo linea del blocco. E fammi sapere se questo fa la differenza!

Cosa c'è di strano è che ho costruito un nuovo progetto con un file di routing che recita semplicemente:

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

Quando ho eseguito questo nella console, ho ottenuto lo stesso errore che state vedendo:

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

... ma quando ho eseguito la stessa cosa in un progetto un po 'più vecchio, ottengo:

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

Così ho poco confid che ciò che ti sto dicendo farà la differenza. (A parte questo, il trucco Rails.application.routes è utile per verificare i percorsi nella console!)

+0

Fai attenzione ai nomi riservati. Prova a non utilizzare static_pages e guarda cosa ottieni. – bcackerman

0

Avevo un problema simile, avevo percorsi che avrebbero solo restituito la pagina radice, ma si sarebbero presentati in rake routes. Secondo un altro sviluppatore per uno spazio dei nomi specifico e per tutti i percorsi, lo root to: (routing) deve essere sempre l'ultimo. Ciò è in contraddizione con la guida di Rails sul routing (vedere http://guides.rubyonrails.org/routing.html#using-root) che dice che ogni chiamata a root dovrebbe essere nella parte superiore del file. Questo sicuramente non funzionava per me. Interessante ...

Problemi correlati