2010-07-13 65 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

看來這裏發生了什麼,是你叫一個塊上的鉤子方法在模板中,被處理,然後根據大禮包內的主題格式(基於名稱),然後吐出(或更加技術性,返回)新格式化的塊。