Rails current_page?与 controller.controller_name

Posted

技术标签:

【中文标题】Rails current_page?与 controller.controller_name【英文标题】:Rails current_page? versus controller.controller_name 【发布时间】:2011-03-03 21:11:54 【问题描述】:

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

【问题讨论】:

按照惯例,您的操作方法名称不应以大写字母开头。 是的,“主要”应该是“主要”。看看这是否有所作为 除了约定之外,不幸的是它并没有什么不同。还是谢谢你的建议! 请包含rake routes的输出。 @jdl:添加了相关输出(有很多,其他的就不贴了) 【参考方案1】:

current_page?(root_path) 工作正常。

但我无法使其与 :controller:action 一起使用

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

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

也很好用。

与the doc 的奇怪矛盾。

【讨论】:

奇怪的是标准方式不起作用,但我现在会选择current_page?(root_path),因为它又好又短。感谢您的回复! current_page?(root_path) 应该只在"/" 为当前路径时为真,但我猜"/pages/main" 不为真。在这里有if controller_name == 'pages' && action_name == 'main' 有什么问题吗? 在我的例子中,我有一个分配给 root 的 Home#index 控制器,在这种情况下,它只重定向到 Pages#main。然后我使用current_page?(main_page_path) 假设您在config/routes.rb 中创建了该路由【参考方案2】:

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

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 的时候返回,所以我创建了一个不同的路由和操作,它运行良好。

【讨论】:

以上是关于Rails current_page?与 controller.controller_name的主要内容,如果未能解决你的问题,请参考以下文章

Rails:为导航设置默认的“当前”css类?

从 Rails 3 控制器调用辅助方法

ReferenceError:用户未定义 rails + 主干 + firebug

rails 新建user的phonenumber字段

Rails 4:使用内置 HTML 清理时禁用自动 CSS 清理

Django 第九篇自定义的分页器组件