ruby on rails - redirect_to - Rails current_page? versus controller.controller_name
redirecting rails (2)
Estoy implementando current_page?
en una vista para probar si el controlador y la acción actuales son iguales a un cierto valor, sin embargo, no se volverá verdadero cuando esté en esa combinación de controlador / acción.
- if current_page?(:controller => ''pages'', :action => ''main'')
# doesn''t return true when on that controller/action combination
La única forma en que funciona es si utilizo un método un poco más detallado como el siguiente:
- if controller.controller_name == ''pages'' && controller.action_name == ''main''
# this works just fine
¿Está mal mi sintaxis o está pasando algo más aquí? ¿Hay una forma mejor de hacerlo, como establecer un BOOL o es la forma correcta?
El objetivo final es mostrar solo un encabezado determinado en la página de destino principal y mostrar un encabezado diferente en todas las demás páginas.
Edición : salida relevante de las 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 al renderizar:
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)
Tuve este problema cuando tuve 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''
La acción de mi controlador manejó la salida dependiendo de los parámetros, y originalmente hice esto porque no quería duplicación.
Cuando lo hice
current_page?(:controller => ''galleries'', :action => ''sales'', :id => id)
No volvió a ser cierto cuando debería, así que creé una ruta y acción diferente y funcionó bien.
current_page?(root_path)
funciona bien.
Pero no puedo hacer que funcione con :controller
y :action
Parece que el ayudante espera una cuerda, así que:
current_page?(url_for(:controller => ''pages'', :action => ''main''))
funciona bien también
Extraña contradicción con el doc .