2009-06-26 19 views

Odpowiedz

13

Powinieneś użyć 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 %> 

Użyj przechwytywania + concat, jeśli chcesz dołączyć dane wyjściowe. Użyj przechwytywania, jeśli musisz przechwycić, a następnie ponownie użyć treści. Jeśli twój blok nie używa explicite <% =, to MUSISZ wywoływać concat (preferowany sposób).

To jest przykład metody, która ukrywa zawartość, jeśli użytkownik nie jest administratorem.

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

Stwierdzenie wydajność zwraca wynik bloku przechodzi. Więc jeśli chcesz wydrukować (konsola?)

def my_div &block 
    yield 
end 

my_div { puts "Something" } 

wynik byłby "coś"

Ale: Jaka jest idea metodę? Wyprowadzanie DIV?

+0

weppos ma znacznie lepszą odpowiedź 8) –

Powiązane problemy