我正在使用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'访问它时,我收到一条错误消息。)
答案 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中使用该变量
并同样在... 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"