理解这个Rails助手

时间:2010-07-13 02:01:32

标签: ruby-on-rails ruby spree

这是我在ruby on rails应用程序狂欢商务中找到的一种帮助方法。

我正在努力更好地了解这里发生了什么,尤其是第12行的capture()方法,这是我以前从未见过的。如果给出了一个块,它会捕获它,否则就没有内容。但是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

2 个答案:

答案 0 :(得分:3)

当您从ERB视图中的块(至少在rails 1.x和2.x)中屈服时,它将直接写入缓冲区,从而写入渲染的html,这可能是不希望的。相反,您可以“捕获”块的评估结果,并将其分配给变量,就像它们在此处所做的那样。无论如何,我可能不会像Ryan Bates那样解释它:

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

答案 1 :(得分:1)

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

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

这里出现的是,您是否在模板中的块上调用了钩子方法,然后根据spree中的主题(基于模块的名称)对其进行处理然后进行格式化,然后吐出(或者更专业,返回)新格式化的块。