错误没有路由匹配rails 3.1.3中的[GET]“/ root_path”

时间:2011-12-28 23:43:13

标签: ruby-on-rails-3 routes

我正在使用Rails教程和Michael Hartl的示例书作为此问题的参考。

这里我使用的是rails 3.1.3。使用命名路由的最佳方法是什么

的routes.rb

 root :to => "pages#home"
  match '/contact', :to => 'pages#contact' 
  match '/about', :to => 'pages#about'      
  match '/help', :to => 'pages#help' 

当我使用about从视图访问这些路径时,我发现没有错误,但当我通过“about_path”访问它时,我收到错误。但在书中他们使用about_path。在rails 3.1中改变了命名路由的概念吗?

        <li><%= link_to "About", '*about*' %></li>
        <li><%= link_to "Contact", 'contact' %></li>
        <li><%= link_to "Home", 'root_path' %></li>

如果我在上面的代码中使用“about_path”,我会收到错误“找不到路线”

问题1.在视图中使用命名路由的最佳方法是什么? (最好的方式意味着我只需要在一个地方改变路线路径)

问题2.如何通过命名路由的概念访问root? (当我尝试使用'root_path'访问它时,我收到一条错误消息。)

5 个答案:

答案 0 :(得分:5)

我认为你必须省略“'”arround ..._路径。

答案 1 :(得分:3)

  • 确保根是第一个。

  • 在命令行类型rake routes中查看您拥有的路由和_path变量。

  • 删除:to但是留下{h} =>(除了root! - 留下:do

答案 2 :(得分:2)

(1)在routes.rb

匹配'/ about'=&gt; '页#大约'

将自动创建一个存储路径名的变量 about_path - 顺便说一句,您的路径名与您的路径名不同。路由语句逐字地指示rails,只要有人键入 / about 作为URL,rails就会按照控制器页面中的定义执行 about 操作。此外,该指令以缩写形式存储在隐式命名路由 about_path 中,rails通过将方法名称 about 连接到字符串 _path 来创建没有任何干预你。

(2)您将在... app / views / layouts / _footer.html.erb中使用该变量

  • &lt;%= link_to“关于”,about_path%&gt;
  • 并同样在... app / views / layouts / _header.html.erb

    (3)在... spec / requests / static_pages_spec.rb中,您将使用

    描述“关于页面”    在{visit about_path}之前

    是的,如果你真的了解路由,你就会理解90%的rails设计,所以要确保你理解了routes.rb里面的内容。

    答案 3 :(得分:1)

    从路径变量中删除引号,即在.erb文件中使用它:

        <li><%= link_to "About", about_path %></li>
        <li><%= link_to "Contact", contact_path %></li>
        <li><%= link_to "Home", root_path %></li>
    

    答案 4 :(得分:-1)

    JP:guard2 jayparteek$ rake routes
       root  /                  {:controller=>"pages", :action=>"home"}
    contact  /contact(.:format) {:controller=>"pages", :action=>"contact"}
      about  /about(.:format)   {:controller=>"pages", :action=>"about"}
       help  /help(.:format)    {:controller=>"pages", :action=>"help"}
    

    从视图访问命名路由

        <li><%= link_to "About", 'about' %></li>
            <li><%= link_to "Contact", 'contact' %></li>
            <li><%= link_to "News-Home", '/' %></li>
    

    路线

      match '/contact' => 'pages#contact' 
      match '/about' => 'pages#about'      
      match '/help' => 'pages#help' 
    
      root :to => "pages#home"