В чем преимущество использования `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) в переменную, чтобы его можно было использовать где-то еще в представлении.

Другие вопросы по тегам