link_to“about”,about_path显示ROR中的错误

时间:2010-07-28 11:18:01

标签: ruby-on-rails

我正在使用Ruby on rails ..我是新手......

我用了一行

   <%= link_to "about",about_path %>

    which throws me a error as,

    undefined local variable or method `about_path' for #<ActionView::Base:0xb5f5baa8>

我在app / views / pages /

下面有about.html页面

请提供一些建议,说明为什么我会这样。

4 个答案:

答案 0 :(得分:5)

我使用Hartl的教程时遇到了同样的问题。这就是我所做的。

在询问rake routes时,我有:

tomsihap-MBP:sample_app tomsihap$ rake routes
              Prefix Verb URI Pattern                     Controller#Action
                root GET  /                               static_pages#home
   static_pages_help GET  /static_pages/help(.:format)    static_pages#help
  static_pages_about GET  /static_pages/about(.:format)   static_pages#about
static_pages_contact GET  /static_pages/contact(.:format) static_pages#contact

然后正确的路径是:

<%= link_to "About",   static_pages_about_path  %>

而不是像哈特尔指南所建议的那样<%= link_to "About", about_path %>

编辑:

好的,我明白了。那是因为路线定义如下:

Rails.application.routes.draw do 
root 'static_pages#home'
get 'static_pages/help' 
get 'static_pages/about' 
get 'static_pages/contact'

而不是后来在教程中解释:

Rails.application.routes.draw do 
root 'static_pages#home' 
get 'help' => 'static_pages#help' 
get 'about' => 'static_pages#about' 
get 'contact' => 'static_pages#contact'

使用这种方式,现在正确的路径是:

<%= link_to "About", about_path  %>

答案 1 :(得分:3)

您的代码正在寻找所谓的命名路由。您需要在config/routes.rb中定义这些内容。此外,您还需要一些控制器和操作来处理它们。请参阅此post,其中介绍了一种通过插图处理静态页面的简单方法。

要获取about_path命名路由,请将其添加到routes.rb

map.about "/pages/about", :controller => "pages", :action => "show", :id => "about"

然后将您的有关页面内容添加到名为app/views/pages/about.html.erb

的文件中

最后:

$ rake routes

告诉您为应用程序定义的所有命名路由及其执行的操作

答案 2 :(得分:2)

我猜你的页面是“静态的”。检查一下..

的routes.rb

# rails 2.3.x
map.about "/pages", :controller => 'pages', :action => 'about'

控制器/ pages_controller.rb

class PagesController < ApplicationController
  def about # not needed, only for "tidiness"

  end
end

...你的erb文件必须在这里:Views \ pages \ about.html.erb

答案 3 :(得分:1)

你的routes.rb是否像map.resources:about?

如果您不知道为什么它应该存在或者是什么,请阅读guides上的RESTful路由。