在Ruby中,我如何检查.html.erb模板生成的类?

时间:2011-04-08 21:55:28

标签: ruby-on-rails ruby erb

在进行J2EE开发时,我发现调试它可以方便地查看JSP编译器生成的Java类。

如何在Ruby中执行等效操作?因为它全部在内存中,所以它不会生成我可以查看的文件。我相信ERB模块会为模板生成相应的对象,那么我该如何实际查看对象呢?我可以在某处删除调试器语句并使用rdb吗?是否有一些配置值我可以告诉它转储对象定义?我正在使用rails,以防万一。

3 个答案:

答案 0 :(得分:2)

我认为rails不会为您的视图生成一个类。它在处理文件后基本上调用eval。或者你的意思是在解析你的模板时检查erb对象吗?

如果是后者你可以在lib \ ruby​​ \ 1.9.1中找到erb.rb我想你可以在整个文件中删除一个调试器语句。

答案 1 :(得分:1)

我总是养成在视图(布局)中添加以下内容的习惯,这允许我检查或调试相关视图使用的参数。

<%= debug(params) %>

这将格式化yaml中的所有参数并以哈希格式显示它们。

查看源代码中的方法以便更好地理解。 SOURCE

答案 2 :(得分:1)

由于语言差异,与Java方式相比存在一些差异。

Ruby的大多数模板库在编译/优化时都遵循以下步骤:

  1. 模板被编译成Ruby源代码 - 不是类,而是遍历原始模板逻辑时追加到字符串缓冲区的长过程。
  2. 评估此ruby代码以便稍后引用,最好在方法体内。这样,它只由解释器解析一次。
  3. 调用包含已解析模板逻辑的方法(或其他上下文)来呈现它。
  4. 无论如何,编译后的模板代码看起来很像原始模板的噪音很大,除非你自己调试模板语言,否则通常无法帮助你调试。

    任何对模板语言实现感兴趣的人都可以浏览Tilt code(使用具有相同渲染界面和优化的不同模板语言)和Temple(一个很棒的模板语言元实现)。