在Rails 3.2 CaptureHelper中,使用capture
和content_for
之间有什么区别?为什么我会选择其中一个呢?
答案 0 :(得分:6)
如果您查看了content_for源,它会在内部调用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中执行类似操作将导致第二个调用附加到“Hello”。