我正在使用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页面请提供一些建议,说明为什么我会这样。
答案 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路由。