Rails:路由问题

eck*_*kza 0 ruby routing routes ruby-on-rails

我正在开发一个简单的Rails应用程序,目前有四个页面 - Home,About,Contact和Search Results.我routes.rb看起来像这样:

IdealmSite::Application.routes.draw do

    root:to => 'main_pages#home'
    match '/about', :to => 'main_pages#about'
    match '/contact', :to => 'main_pages#contact'
    match '/search_results', :to => 'main_pages#search_results'

end
Run Code Online (Sandbox Code Playgroud)

一切正常,直到我尝试使用命名路由作为link_to函数的参数,如下所示:

<%= link_to "Home", home_path %>

Rails服务器的输出说明了这一点:

ActionView::Template::Error (undefined local variable or method `home_path' for #<#<Class:0x00000100eb2200>:0x00000100eaef38>):
    20:             <div id="left">
    21:   <div class="verticalmenu">
    22:    <ul>
    23:      <li><%= link_to "Home", home_path %></li>
    24:      <li><%= link_to "About", '#' %></li>
    25:      <li><%= link_to "Contact", '#' %></li>
    26:    </ul>
  app/views/layouts/application.html.erb:23:in `_app_views_layouts_application_html_erb___584831540324030083_2155170260__1382439999518380141'

Rendered /Users/idealm/.rvm/gems/ruby-1.9.2-p180/gems/actionpack-3.0.1/lib/action_dispatch/middleware/templates/rescues/_trace.erb (1.1ms)
Rendered /Users/idealm/.rvm/gems/ruby-1.9.2-p180/gems/actionpack-3.0.1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (2.5ms)
Rendered /Users/idealm/.rvm/gems/ruby-1.9.2-p180/gems/actionpack-3.0.1/lib/action_dispatch/middleware/templates/rescues/template_error.erb within rescues/layout (7.1ms)
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

mik*_*son 6

创建路径时,它会为您创建帮助程序.

root => 'main_pages#home'
Run Code Online (Sandbox Code Playgroud)

表示您现在可以在应用程序中使用"root_path"和"root_url".如果你想拥有home_path,你必须这样做:

match '/home' => 'main_pages#home', :as => :home
Run Code Online (Sandbox Code Playgroud)

那:作为选项是创建助手whatever_path和whatever_url.

请记住,您可以看到所有路线:

rake routes
Run Code Online (Sandbox Code Playgroud)