2010-07-13 48 views
0

这是一个辅助方法,我在Rails应用程序狂欢商业红宝石找到。了解这个Rails的助手

我想更好地了解这里发生,特别是第12行捕获()方法,这是我以前从来没见过。如果给出了一个块,它会捕获它,否则就没有内容。但是capture()从哪里来?它在做什么?

11 def hook(hook_name, locals = {}, &block) 
12  content = block_given? ? capture(&block) : '' 
13  result = Spree::ThemeSupport::Hook.render_hook(hook_name, content, self, locals) 
14  block_given? ? concat(result.to_s) : result 
15 end 
+0

这是解决'未初始化的常量施普雷方法:: ThemeSupport'问题?如果是的话如何实现这个方法和在哪里写它? – 2012-09-19 17:06:46

回答

3

当从块在ERB视图(至少在导轨1.x和2.x)产生,它会直接写入到缓冲器并因此呈现的HTML,这可能是不希望的。相反,您可以“捕获”块的评估结果,并将其分配给一个变量,就像他们在这里完成的一样。无论如何,我可能没有解释它,以及瑞恩·贝茨在这里所做的:

http://railscasts.com/episodes/40-blocks-in-view

1

捕获块允许您从模板文件中取一块,对其进行处理并将其存储在变量中。

API:http://api.rubyonrails.org/classes/ActionView/Helpers/CaptureHelper.html#M002300

看来这里发生了什么,是你叫一个块上的钩子方法在模板中,被处理,然后根据大礼包内的主题格式(基于名称),然后吐出(或更加技术性,返回)新格式化的块。