【问题标题】:Is there a way to list the available variables in an Ruby ERB template?有没有办法在 Ruby ERB 模板中列出可用变量?
【发布时间】:2011-04-17 13:30:34
【问题描述】:

假设我有一个名为 my_template.html.erb 的 Ruby 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']

任何帮助将不胜感激。

谢谢, 迈克

【问题讨论】:

  • 不知道这是否真的可能,但这对我来说似乎是个坏主意。通常,视图取决于控制器,而不是其他方式。

标签: ruby-on-rails ruby erb


【解决方案1】:

要获取可用于您的 .erb 文件的变量列表(从控制器):

在erb中添加断点:

<% debugger %>

然后在调试器中键入instance_variables 以查看所有可用的实例变量。

添加:请注意,instance_variables 是 Ruby 类 Object 及其所有子类中可用的方法。 (正如@mikezter 所指出的那样。)因此,如果您真的想要,您可以从您的软件中以编程方式调用该方法,而不是使用调试器。

您将获得当前对象的实例变量列表。

添加:获取 .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

【讨论】:

  • @mikezter:-1?似乎有些苛刻。调试器文档(请参阅答案中的链接)不是很清楚。如果您只是指出在调试器中键入 instance_variables 确实将该方法名称发送到当前对象,我会赞成您的评论。
  • 感谢您的帮助!对于其他任何人:正则表达式(括号)中的捕获组是不必要的,并且会导致嵌套数组而不仅仅是变量名称的数组。
猜你喜欢
  • 2018-03-21
  • 1970-01-01
  • 1970-01-01
  • 2010-09-14
  • 2016-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-07
相关资源
最近更新 更多