3

Rails 3.2 CaptureHelpercaptureで、とを使用することの違いは何ですか。またcontent_for、なぜどちらかを選択するのですか?

4

1 に答える 1

6

content_for sourceをチェックアウトすると、内部でcaptureが呼び出されます。

def content_for(name, content = nil, &block)
  if content || block_given?
    content = capture(&block) if block_given?
    @view_flow.append(name, content) if content
    nil
  else
    @view_flow.get(name)
  end
end

したがって、メソッドを読むと、content_forの主な利点は、同じ名前のコンテンツに対して複数のブロックを使用して複数回呼び出すことができ、追加の呼び出しごとに、すでにレンダリングされているものに追加されることです。一方、キャプチャの場合は、次のように呼び出します。

<% @greeting = capture do %>
  Hello
<% end %>

その後、次のように呼び出します。

<% @greeting = capture do %>
  Or, in espanol, Hola
<% end %>

次に、最後の部分がキャプチャされる唯一の部分であり、「Hello」は破棄されます。一方、content_forで同様のことを行うと、2番目の呼び出しが「Hello」に追加されます。

于 2012-05-31T21:51:51.890 に答える