27

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)
4

2 回答 2

32

current_page?(root_path)工作正常。

但我不能让它:controller:action

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

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

工作也很好。

与doc奇怪的矛盾。

于 2011-03-03T22:52:31.120 回答
4

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

match '/galleries/sales' => 'galleries#sales', :as => 'gallery_sales'
match '/galleries/sales/:id' => 'galleries#sales', :as => 'gallery_category_sales'

我的控制器操作根据参数处理输出,我最初是这样做的,因为我不想重复。

当我这样做时:

current_page?(:controller => 'galleries', :action => 'sales', :id => id)

它在应该返回的时候没有返回 true,所以我创建了一个不同的路线和动作,它运行良好。

于 2011-09-09T17:47:10.590 回答