Rails current_page? 与controller.controller_name相对

我正在实施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) 

current_page?(root_path)工作正常。

但我无法使用:controller:action

似乎帮助者需要一个字符串,所以:

 current_page?(url_for(:controller => 'pages', :action => 'main')) 

工作得很好。

与文档奇怪的矛盾。

当我有两条非常相似的路线时,我遇到了这个问题。 看一下这个:

 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,所以我创建了一个不同的路线和动作,它工作正常。