Application Helpers
Output Helpers
Output helpers are a collection of important methods for managing, capturing and
displaying output in various ways and is used frequently to support higher-level
helper functions. There are three output helpers worth mentioning:
content_for, capture_html, and concat_content
The content_for functionality supports capturing content and then rendering
this into a different place such as within a layout. One such popular example is
including assets onto the layout from a template:
# app/views/site/index.erb
# ...
<% content_for :assets do %>
<%= stylesheet_link_tag 'index', 'custom' %>
<% end %>
# ...
Added to a template, this will capture the includes from the block and allow them to be yielded into the layout:
# app/views/layout.erb
<head>
<title>Example</title>
<%= stylesheet_link_tag 'style' %>
<%= yield_content :assets %>
</head>
This will automatically insert the contents of the block (in this case a stylesheet include) into the location the content is yielded within the layout.
You can also check if a content_for block exists for a given key using
content_for?:
# app/views/layout.erb
<% if content_for?(:assets) %>
<div><%= yield_content :assets %></div>
<% end %>
The capture_html and the concat_content methods allow content to be
manipulated and stored for use in building additional helpers accepting blocks
or displaying information in a template. One example is the use of these in
constructing a simplified form_tag helper which accepts a block.
# form_tag '/register' do ... end
def form_tag(url, options={}, &block)
# ... truncated ...
inner_form_html = capture_html(&block)
concat_content '<form>' + inner_form_html + '</form>'
end
This will capture the template body passed into the form_tag block and then
append the content to the template through the use of concat_content. Note
have been built to work for both haml and erb templates using the same syntax.
List of Output Helpers
content_for(key, &block)- Capture a block of content to be rendered at a later time.
- Existence can be checked using the
content_for?(key)method. content_for(:head) { ...content... }- Also supports arguments passed to the content block
content_for(:head) { |param1, param2| ...content... }
yield_content(key, *args)- Render the captured content blocks for a given key.
yield_content :head- Also supports arguments yielded to the content block
yield_content :head, param1, param2
capture_html(*args, &block)- Captures the html from a block of template code for erb or haml
capture_html(&block)=> "...html..."
concat_content(text="")- Outputs the given text to the templates buffer directly in erb or haml
concat_content("This will be output to the template buffer in erb or haml")
last updated: 2022-02-22
comments powered by Disqus