В чем преимущество использования `capture` и`concat`, чем просто рендеринг блока непосредственно в Rails?
Глядя на документы для concat
, кто-то приводит пример того, как использовать его ниже:
def block_to_partial(partial_name, options = {}, &block)
options.merge!(:body => capture(&block))
concat(render(:partial => partial_name, :locals => options), block.binding)
end
Но вы не могли бы просто сделать это без concat
? Это может просто работать с render
право?
1 ответ
Решение
render
просто отображает шаблон - concat записывает его в выходной буфер, используемый в ответе.
Принимает это ERB например:
<% render partial: 'foo/bar' %>
Так как мы используем <% %>
вывод кода Ruby только что оценен. На самом деле ничего не выводится.
<%= render partial: 'foo/bar' %>
А также
<% concat(render(partial: 'foo/bar')) %>
Оба добавят содержимое частичного к телу ответа.
Реальная выгода использования concat
это когда вы создаете вспомогательные методы, которые должны писать прямо в буфер.
capture
с другой стороны, используется для сохранения вывода блока (фрагмента HTML) в переменную, чтобы его можно было использовать где-то еще в представлении.