2012-07-03 35 views
10

Vì vậy, tôi tiếp tục chạy vào báo lỗi sau:Lỗi định tuyến đường ray? 'Không có con đường trận'

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

Tôi cố gắng chạy tuyến cào và tôi có thể thấy rằng con đường tồn tại:

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

Nhưng mỗi khi tôi cố gắng đến thăm trang "https://stackoverflow.com/users/1" (1 là id người dùng), tôi nhận được lỗi ở trên. Bất kỳ ý tưởng? Cảm ơn!

Dưới đây là tôi 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' 

Dưới đây là tôi 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

hiển thị tệp tuyến đường của bạn.rb –

+0

Có phải '/ người dùng/1 /' hoạt động không? – sarnold

+0

Không, '/ users/1 /' dường như không hoạt động .. – user1497531

Trả lời

1

Thử khắc phục sự typo:

root :to 'static_pages#home' 

(chứ không phải là root to:), và di chuyển nó đến người cuối cùng dòng của khối. Và hãy cho tôi biết nếu điều đó tạo nên sự khác biệt!

Có gì kỳ lạ là tôi đã xây dựng một dự án mới với một tập tin định tuyến mà chỉ đơn giản đọc:

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

Khi tôi chạy này trong giao diện điều khiển, tôi đã nhận lỗi cùng bạn nhìn thấy:

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

... nhưng khi tôi chạy điều tương tự trong một dự án lớn hơn một chút, tôi nhận được:

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

Vì vậy, tôi có rất ít confid ence rằng những gì tôi nói với bạn sẽ tạo sự khác biệt. (Ngoài ra, thủ thuật Rails.application.routes rất hữu ích để xác minh đường dẫn trong bảng điều khiển!)

+0

Hãy cẩn thận với tên riêng. Hãy thử không sử dụng static_pages và xem những gì bạn nhận được. – bcackerman

0

Tôi gặp vấn đề tương tự, tôi có các tuyến đường sẽ chỉ trả về trang gốc, nhưng sẽ hiển thị trong rake routes. Theo một nhà phát triển đồng nghiệp cho một không gian tên cụ thể và cho tất cả các tuyến đường, root to: (routing) phải luôn là cuối cùng. Đây là mâu thuẫn với hướng dẫn Rails về định tuyến (xem http://guides.rubyonrails.org/routing.html#using-root) mà nói rằng bất kỳ cuộc gọi đến thư mục gốc nên ở trên cùng của tập tin của bạn. Điều đó chắc chắn không hiệu quả với tôi. Thú vị ...

Các vấn đề liên quan