我正在视图中实现current_page?
以测试当前控制器和操作是否等于某个值,但是当在该控制器/操作组合上时它不会返回true。
- if current_page?(:controller => 'pages', :action => 'main')
# doesn't return true when on that controller/action combination
它工作的唯一方法是使用更简洁的方法,如下所示:
- if controller.controller_name == 'pages' && controller.action_name == 'main'
# this works just fine
我的语法错了还是其他地方发生了什么?有没有更好的方法来做到这一点,例如设置BOOL或者这是正确的方法吗?
最终目标是仅在主着陆页上显示某个标题,同时在所有其他页面上显示不同的标题。
修改:来自rake routes
的相关输出:
pages_main GET /pages/main(.:format) {:controller=>"pages", :action=>"main"}
root /(.:format) {:controller=>"pages", :action=>"main"}
此外,这是渲染时的服务器输出:
Started GET "/" for 127.0.0.1 at 2011-03-03 16:54:40 -0500
Processing by PagesController#main as HTML
Rendered pages/main.html.haml within layouts/application (203.8ms)
答案 0 :(得分:30)
current_page?(root_path)
效果很好。
但我无法使用:controller
和:action
帮助者似乎需要一个字符串,所以:
current_page?(url_for(:controller => 'pages', :action => 'main'))
也可以。
与the doc发生了奇怪的矛盾。
答案 1 :(得分:4)
当我有两条非常相似的路线时,我遇到了这个问题。看看这个:
match '/galleries/sales' => 'galleries#sales', :as => 'gallery_sales'
match '/galleries/sales/:id' => 'galleries#sales', :as => 'gallery_category_sales'
我的控制器操作根据params处理输出,我最初这样做b / c我不想复制。
当我这样做时:
current_page?(:controller => 'galleries', :action => 'sales', :id => id)
它应该没有返回true,所以我创建了一个不同的路径和动作,它运行良好。