Есть ли способ перечислить доступные переменные в шаблоне Ruby ERB? - PullRequest
7 голосов
/ 27 сентября 2010

Предположим, у меня есть шаблон Ruby ERB с именем my_template.html.erb , и он содержит следующее:

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

Есть ли способ, которым я могу программно перечислить все доступныепеременные в шаблоне?

Например, следующий метод:

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

вернет что-то вроде:

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

Любая помощь будет принята с благодарностью.

Спасибо, Майк

1 Ответ

25 голосов
/ 27 сентября 2010

Чтобы получить список переменных, доступных для вашего файла .erb (из контроллера):

Добавить точку останова в erb:

<% debugger %>

Затем введите instance_variables в отладчике, чтобы увидеть все доступные переменные экземпляра.

Добавлено: обратите внимание, что instance_variables - это метод, доступный из объекта класса Ruby и всех его подклассов. (Как отмечает @mikezter.) Таким образом, вы можете вызывать метод программно изнутри вашего sw, а не использовать отладчик, если вы действительно хотите.

Вы получите список переменных экземпляра для текущего объекта.

Добавлено: Чтобы получить список переменных, используемых файлом .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
...