2012-01-13 8 views
10

Ho un parziale che sto usando in diverse pagine. Voglio nascondere condizionatamente un determinato div all'interno del partial in base alla vista che lo sta visualizzando.rails accesso vista nome all'interno parziale

Stavo pensando di creare un file javascript specifico per la pagina che cerca il div e lo nasconde.

Ma, se ci fosse un modo per recuperare il nome della vista/nome della pagina all'interno del parziale, sarebbe centrale per il parziale e non richiederebbe di caricare lo stesso file javascript in più pagine.

Qualcuno sa un modo per fare questo all'interno di un parziale di

risposta

16

Mentre @ di Wahaj risposta avrebbe funzionato, se si vuole fare ciò che è necessario in una posizione centrale, si potrebbe verificare il controller_name e action_name variabili nel parziale per determinare la vista in cui ti trovi (ad esempio controller_name == "services" e action_name == "show" ti faremo sapere che stai nella visualizzazione Mostra per il controller Servizio)

+6

params [: controller] o params [: action] non sono raccomandati, invece usare 'controller_name', 'action_name' – Naveed

+1

Wow, mi sento un idiota. Non sapevo nemmeno che esistesse. Grazie per la segnalazione! – jhdavids8

+1

Faresti meglio a modificare la tua risposta originale per rispecchiarlo, oppure le persone potrebbero fare ciò che hai detto in origine. –

2

Si potrebbe inviare il parametro di stile come una variabile locale al parziali, variando il parametro a seconda di dove si sta chiamando. Qualcosa di simile:

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

e nel parziale che si possa fare:

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

o forse una var locale 'hide_div'. Una finezza con i partial è definita? metodo, il che significa che la variabile non sarebbe richiesta su tutte le chiamate per rendere il partial. –

1

soluzione semplice, all'interno del tuo parziale controllare se è necessario mostrare parziale o non

_partial_name.html.erb

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

e poi in aiuto applicazione

app/helper/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

si può ottenere il nome del partial attualmente di rendering da un metodo di supporto con il seguente:

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