Подтвердить что ты не робот

Rails current_page? против controller.controller_name

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

Ответ 1

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

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

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

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

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

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

Ответ 2

У меня была эта проблема, когда у меня было 2 маршрута, которые были очень похожи. Проверьте это:

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

Мое действие контроллера обработало выход в зависимости от параметров, и я изначально сделал это b/c, я не хотел дублирования.

Когда я это сделал:

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

Он не возвращался к истине, когда он должен был иметь, поэтому я создал другой маршрут и действие, и он работал нормально.