3

在 Rails 3.2 CaptureHelpercapture中,使用and有什么区别content_for,为什么我会选择其中一个?

4

1 回答 1

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”。

于 2012-05-31T21:51:51.890 回答