Рельсы current_page? по сравнению с controller.controller_name - PullRequest
25 голосов
/ 04 марта 2011

Я реализую 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)

Ответы [ 2 ]

31 голосов
/ 04 марта 2011

current_page?(root_path) отлично работает.

Но я не могу заставить его работать с :controller и :action

Похоже, что помощник ожидает строку, поэтому:

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

тоже отлично работает.

Странное противоречие с документом .

4 голосов
/ 09 сентября 2011

У меня была эта проблема, когда у меня было 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, когда должен был, поэтому я создал другой маршрут и действие, и он работал нормально.

...