Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails当前页面?与controller.controller\u名称相对_Ruby On Rails_Controller_Action_Current Page - Fatal编程技术网

Ruby on rails Rails当前页面?与controller.controller\u名称相对

Ruby on rails Rails当前页面?与controller.controller\u名称相对,ruby-on-rails,controller,action,current-page,Ruby On Rails,Controller,Action,Current Page,我正在实现current\u page?以测试当前控制器和操作是否等于某个值,但是在该控制器/操作组合上它不会返回true - if current_page?(:controller => 'pages', :action => 'main') # doesn't return true when on that controller/action combination 唯一可行的方法是我使用更详细的方法,如: - if controller.controller_name

我正在实现
current\u 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,或者这是正确的方法

最终目标是在主登录页上仅显示某个标题,而在所有其他页面上显示不同的标题

编辑:耙路径的相关输出:

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)
当前页面?(根路径)
工作正常

但是我不能让它与
: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'
我的控制器操作根据参数处理输出,我最初是这样做的,我不想重复

当我这样做的时候:

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

它在应该返回的时候没有返回true,所以我创建了一个不同的路由和操作,它工作得很好。

按照惯例,您的操作方法名称不应该以大写字母开头。是的,“Main”应该是“Main”。看看这是否会有所不同。撇开传统不谈,不幸的是,这并没有带来什么不同。还是谢谢你的建议!请包括
rake routes的输出
@jdl:添加了相关的输出(有很多,所以我没有粘贴其他的输出)。奇怪的是,标准方法不起作用,但我现在将使用
当前页面(根路径)
,因为它既好又短。谢谢你的回复<代码>当前页面?(根路径)仅当当前路径为
“/”
时才应为真,但我猜不适用于
“/pages/main”
。如果controller\u name='pages'和&action\u name='main'在这里使用
是否有任何错误?在我的例子中,我有一个
Home#index
控制器分配给root,在这种情况下,它只重定向到
pages#main
。然后我使用
current\u page?(main\u page\u path)
假设您在
config/routes.rb中创建了该路由