2009-06-26 2 views

ответ

13

Вы должны использовать 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 %> 
2

http://www.rubycentral.com/book/tut_containers.html

Оператор выход будет возвращать результат блока прошло. Так что если вы хотите распечатать (консоль?)

def my_div &block 
    yield 
end 

my_div { puts "Something" } 

Would выход "Что-то"

Но: Что идея вашего метода? Вывод DIV?

+0

weppos имеет гораздо лучший ответ 8) –

Смежные вопросы