Отслеживание ошибок маршрутизации в Rails - PullRequest
1 голос
/ 21 октября 2010

Я прошёл свой первый RoR учебник и обнаружил ошибку маршрутизации контроллера действий. Я проверил свой код по крайней мере 8 раз, но не могу выяснить проблему. Я уверен, что это случится снова в будущем. Мой вопрос, в общем, как мне решить эти ошибки? Если это уместно, я использую RVM, Rails 3.0.1 и Ruby 1.9.2.

Для справки о том, с чем я сейчас имею дело, вот некоторые файлы:

pages_controller.rb

class PagesController < ApplicationController
  def home
    @title = "Home"
  end

  def contact
    @title = "Contact"
  end

  def about
    @title = "About"
  end

  def help
    @title = "Help"
  end
end

layout_links_spec.rb

require 'spec_helper'

    describe "LayoutLinks" do

      it "should have a Home page at '/'" do
        get '/'
        response.should have_selector('title', :content => "Home")
      end

      it "should have a Contact page at '/contact'" do
        get '/contact'
        response.should have_selector('title', :content => "Contact")
      end

      it "should have an About page at '/about'" do
        get '/about'
        response.should have_selector('title', :content => "About")
      end

      it "should have a Help page at '/help'" do
        get '/help'
        response.should have_selector('title', :content => "Help")
      end
    end

routes.rb

SampleApp::Application.routes.draw do
  match '/contact', :to => 'pages#contact'
  match '/about',   :to => 'pages#about'
  match '/help',    :to => 'pages#help'

  root :to => 'pages#home'
end

Клеммный выход

Started GET "/pages/home" for 127.0.0.1 at 2010-10-21 06:51:01 -0400

ActionController::RoutingError (No route matches "/pages/home"):


Rendered /Users/zak/.rvm/gems/ruby-1.9.2-p0/gems/actionpack-3.0.1/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (0.8ms)

Также побежал rake routes и получил

ZKidds-MacBook-Pro:sample_app zak$ rake routes
(in /Users/zak/rails_projects/sample_app)
contact  /contact(.:format) {:controller=>"pages", :action=>"contact"}
  about  /about(.:format)   {:controller=>"pages", :action=>"about"}
   help  /help(.:format)    {:controller=>"pages", :action=>"help"}
   home  /home(.:format)    {:controller=>"pages", :action=>"home"}

Ответы [ 3 ]

1 голос
/ 21 октября 2010

Как сказал @ Мэтт , вы не определили маршрут /pages/home, он соответствует только /.

Лучший совет, который я могу вам дать, имея делос проблемами маршрутизации - это запускать rake routes в терминале (где вы будете запускать rails server и т. д.), который выводит список всех распознанных маршрутов для вашего приложения.

1 голос
/ 16 августа 2011

, если вы следуете учебнику по Ruby on Rails, в нем говорится об удалении index.html

http://ruby.railstutorial.org/chapters/filling-in-the-layout#top

1 голос
/ 21 октября 2010

У вас нет маршрута для /pages/home, определенного где-либо.У вас есть только корень / до PagesController и метод home.Поэтому запрос / будет работать, но /pages/home не будет.

Вам нужно либо определить:

match "/pages/home" => "pages#home"

, либо добавить ресурс Pages с помощью дополнительного метода home:

resources :pages do
  get "home", :on => :collection
end

Вот некоторые полезные ресурсы маршрутизации:

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