2011-03-03 30 views
24

我在執行current_page?以檢測當前控制器和操作是否等於某個值,但是在該控制器/操作組合時它不會返回true。Rails current_page?與controller.controller_name

- 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) 
+2

按照慣例,您的操作方法名稱不應以大寫字母開頭。 – 2011-03-03 21:13:48

+0

是的,'主'應該是'主'。看看是否有所作爲 – s84 2011-03-03 21:16:15

+0

公約不談,它不幸並沒有什麼不同。謝謝你的建議! – iwasrobbed 2011-03-03 21:22:37

回答

29

current_page?(root_path)工作正常。

但我不能使它與:controller:action

看來輔助工作,需要一個字符串,那麼:

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

正常工作了。

the doc奇怪的矛盾。

+0

奇怪的是,標準的方式不起作用,但我會''current_page?(root_path)'for現在既好又短。感謝您的迴應! – iwasrobbed 2011-03-04 03:26:03

+0

'current_page?(root_path)'只適用於當前路徑的'「/」'而不適用於'「/ pages/main」'我猜。 'if controller_name =='pages'&& action_name =='main''在這裏有任何錯誤嗎? – kangkyu 2015-08-14 20:38:24

+0

在我的情況下,我有一個'主頁#索引'控制器分配給根,只有重定向到,在這種情況下,'頁#主'。然後我使用'current_page?(main_page_path)',假設你在'config/routes.rb'中創建了這個路由 – 2017-03-21 11:02:05

4

我有這個問題,當我有2條非常相似的路線。檢查了這一點:

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時,它應該有,所以我創建了一個不同的路線和行動,它工作得很好。

相關問題