0

これは、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
4

2 に答える 2

3

ERB ビュー (少なくとも Rails 1.x および 2.x) でブロックから生成すると、バッファに直接書き込まれるため、レンダリングされた html に書き込まれますが、これはおそらく望ましくありません。代わりに、ブロックの評価の結果を「キャプチャ」して、ここで行ったように変数に割り当てることができます。とにかく、ライアン・ベイツがここで行っているように、私はおそらくそれを説明していません:

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

于 2010-07-13T02:36:09.550 に答える
1

キャプチャブロックを使用すると、テンプレートファイルからブロックを取得して処理し、変数に保存できます。

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

ここで起こっているのは、テンプレート内のブロックでフックメソッドを呼び出し、処理されてから、スプリー内のテーマに基づいて(モジュールの名前に基づいて)フォーマットされてから吐き出される(またはより技術的で、新しくフォーマットされたブロックを返します。

于 2010-07-13T02:27:00.513 に答える