2012-01-13 23 views
10

Tengo un parcial que estoy usando en diferentes páginas. Quiero ocultar de forma condicional un cierto div dentro del parcial en función de la vista que lo está representando.rails access view name inside partial

Estaba pensando en crear un archivo javascript específico de la página que busque el div y lo oculte.

Pero, si hubiera una manera de recuperar el nombre de vista/nombre de página dentro del parcial, sería central para el parcial y no necesitaría cargar el mismo archivo de JavaScript en varias páginas.

¿Alguien sabe de una manera de hacer esto dentro de un parcial

Respuesta

16

Mientras respuesta de @ Wahaj funcionaría, si usted quiere hacer lo que necesita en una ubicación central, se puede comprobar la controller_name y action_name variables en el parcial para determinar la opinión de que estás en (por ejemplo controller_name == "services" y action_name == "show" dejarían que usted sabe que está en el Salón vista para el controlador de servicio)

+6

params [: controller] o params [: action] no son recomendables, en su lugar usa 'controller_name', 'action_name' – Naveed

+1

Wow, me siento como un idiota. Ni siquiera sabía que existía. Gracias por señalar eso! – jhdavids8

+1

Será mejor que edite su respuesta original para reflejar esto, o la gente puede hacer lo que dijo originalmente. –

2

Se podría enviar el parámetro de estilo como una variable local a la parcial, variando el parámetro dependiendo de donde está llamando. Algo así como:

render :partial => 'xyz', :locals => {:style => 'display:none or display:block'} 

y en el parcial que podría hacer:

<div style=<%=style%>></div> 
+1

o quizás un local var 'hide_div'. Una delicadeza con parciales es el definido? método, lo que significa que la variable no sería necesaria en todas las llamadas para representar el parcial. –

1

solución simple, dentro de su parcial comprobar si necesita mostrar parcial o no

_partial_name.html.erb

<%= content_tag :div, :style=> "display : #{show_div? ? 'block' : 'none'}" do%> 
    html...or other stuff 
<%end%> 

y luego en ayudante de aplicación

app/ayudante/application_helper.rb

def show_div? #you can set name of your div like 'show_sidebar_div?' 
    #decide either show this div or not 
action_name == 'show' 
end 
6

le puede obtener el nombre del parcial que se está procesando actualmente desde un método de Ayuda con lo siguiente:

controller.view_context.view_renderer.instance_variable_get('@_partial_renderer').instance_values['path']