2009-06-26 6 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

yield文は、渡されたブロックの結果を返します。だから、あなたは(コンソール?)

def my_div &block 
    yield 
end 

my_div { puts "Something" } 

う出力「何か」を印刷したい場合

しかし: あなたの方法のアイデアは何ですか? DIVを出力しますか?

+0

wepposははるかに良い答えがあります8) –

関連する問題