Я хочу сделать помощником, как показано ниже.Как создать помощник с блоком?
def my_div some_options, &block # How do I print the result of the block? end
Я хочу сделать помощником, как показано ниже.Как создать помощник с блоком?
def my_div some_options, &block # How do I print the result of the block? end
Вы должны использовать CaptureHelper.
def my_div(some_options, &block)
# capture the value of the block a string
content = capture(&block)
# concat the value to the output
concat(content)
end
<% my_div([]) do %>
<p>The content</p>
<% end %>
def my_div(some_options, &block)
# capture the value of the block a string
# and returns it. You MUST use <%= in your view.
capture(&block)
end
<%= my_div([]) do %>
<p>The content</p>
<% end %>
Использовать захват + concat, если вам нужно выполнить вывод. Используйте захват, если вам нужно захватить, а затем повторно использовать контент. Если ваш блок явно не использует <% =, тогда вы ДОЛЖНЫ называть concat (предпочтительный способ).
Это пример метода, который скрывает содержимое, если пользователь не администратор.
def if_admin(options = {}, &block)
if admin?
concat content_tag(:div, capture(&block), options)
end
end
<% if_admin(:style => "admin") do %>
<p>Super secret content.</p>
<% end %>
http://www.rubycentral.com/book/tut_containers.html
Оператор выход будет возвращать результат блока прошло. Так что если вы хотите распечатать (консоль?)
def my_div &block
yield
end
my_div { puts "Something" }
Would выход "Что-то"
Но: Что идея вашего метода? Вывод DIV?
weppos имеет гораздо лучший ответ 8) –