2010-09-27 6 views
6

Załóżmy, że mam szablon Ruby ERB nazwie my_template.html.erb i zawiera następujące elementy:Czy istnieje sposób na wylistowanie dostępnych zmiennych w szablonie ERB Ruby?

<div><%= @div_1 %></div> 
<div><%= @div_2 %></div> 
<div><%= @div_3 %></div> 

Czy istnieje sposób mogę programowo się lista wszystkich dostępnych zmiennych w szablonie?

Na przykład następujący sposób:

def list_out_variables 
    template = File.open("path_to/my_template.html.erb", "rb").read 
    erb = ERB.new(template) 
    erb.this_method_would_list_out_variables 
end 

wróci coś takiego:

['div1','div2','div3'] 

Każda pomoc będzie mile widziana.

Dzięki, Mike

+1

nie wiem, czy jest to rzeczywiście możliwe, ale wydaje się to zły pomysł, aby mnie. Zwykle widok zależy od kontrolera, a nie w inny sposób. –

Odpowiedz

21

Aby uzyskać listę dostępnych zmiennych do pliku .erb (ze sterownika):

dodać breakpoint w erb:

<% debugger %> 

Następnie wpisz instance_variables w debugerze, aby zobaczyć wszystkie dostępne zmienne instancji.

Dodano: Zauważ, że instance_variables jest metodą dostępną z obiektu klasy Ruby i wszystkich jej podklas. (Jak zauważył @mikezter.) Można więc wywołać metodę programowo z poziomu sw, zamiast używać debuggera, jeśli naprawdę tego chcesz.

Otrzymasz listę zmiennych instancji dla bieżącego obiektu.

Dodano: Aby uzyskać listę zmiennych używanych przez plik .erb:

# <template> is loaded with the entire contents of the .erb file as 
# one long string 
var_array = template.scan(/(\@[a-z]+[0-9a-z]*)/i).uniq 
+1

-1 dla wypowiedzenia 'instance_variables' jest poleceniem debuggera. Jest to metoda na 'Object' – mikezter

+4

@mikezter: -1? Wydaje się nieco ostry. Dokumenty debuggera (patrz link w odpowiedzi) nie są tak jasne. Przejmowałbym twój komentarz, gdybyś tylko wskazał, że wpisywanie zmiennych_instancji w debugerze naprawdę wysyła tę nazwę metody do bieżącego obiektu. –

+0

Dzięki za pomoc! Dla każdego innego: grupa przechwytywania w regex (nawias) jest niepotrzebna i powoduje zagnieżdżoną tablicę zamiast tylko tablicy nazw zmiennych. –

Powiązane problemy