2011-03-03 14 views
24

Estoy implementando current_page? en una vista para probar si el controlador actual y la acción es igual a un cierto valor, sin embargo, no volverá a ser verdadero cuando esté en esa combinación de controlador/acción.Rails current_page? versus controller.controller_name

- if current_page?(:controller => 'pages', :action => 'main') 
# doesn't return true when on that controller/action combination 

La única forma en que se está trabajando es si utilizo el método un poco más detallado de este modo:

- if controller.controller_name == 'pages' && controller.action_name == 'main' 
# this works just fine 

¿Es mi sintaxis incorrecta o hay alguna otra cosa que sucede aquí? ¿Hay una forma mejor de hacerlo, como establecer un BOOL o es la manera correcta?

El objetivo final es mostrar solo un encabezado determinado en la página principal de aterrizaje mientras se muestra un encabezado diferente en todas las demás páginas.

Editar: salida pertinente de rake routes:

pages_main GET /pages/main(.:format) {:controller=>"pages", :action=>"main"} 

root /(.:format) {:controller=>"pages", :action=>"main"} 

Además, esta es la salida del servidor antes de mostrarlo:

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

Sus nombres de método de acción no deben comenzar con una letra mayúscula, por convención. –

+0

sí, 'Principal' debería ser 'principal'. ver si eso hace una diferencia – s84

+0

Convención a un lado, lamentablemente no hizo la diferencia. ¡Gracias por la sugerencia de todos modos! – iwasrobbed

Respuesta

29

current_page?(root_path) funciona bien.

Pero no puedo hacer que funcione con :controller y :action

Parece el ayudante espera una cadena, por lo que:

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

funciona bien también.

Contradicción extraña con the doc.

+0

Es extraño que el modo estándar no funcione, pero voy a ir con 'current_page? (Root_path)' para ahora, ya que es bueno y corto. ¡Gracias por la respuesta! – iwasrobbed

+0

'current_page? (Root_path)' debe ser verdadero solo cuando '"/"' para la ruta actual, pero no para '"/pages/main "' Supongo. ¿Es incorrecto tener 'if nombre_de_controlador == 'páginas' && nombre_de_acción == 'principal'' aquí? – kangkyu

+0

En mi caso, tengo un controlador 'Home # index' asignado a la raíz al que solo se redirige, en este caso,' Pages # main'. Luego uso 'current_page? (Main_page_path)' asumiendo que creó esa ruta en 'config/routes.rb' –

4

Tuve este problema cuando tenía 2 rutas que eran muy similares. Mira esto:

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

Mi acción del controlador maneja la salida en función de params, y lo hice originalmente este b/c que no quería la duplicación.

Cuando lo hice:

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

no volvió cierto cuando se debe tener, por lo que creó una ruta y acción diferente y ha funcionado bien.