以下のようなヘルパーを作りたいです。ブロックを使用してヘルパーを作成するにはどうすればよいですか?
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
yield文は、渡されたブロックの結果を返します。だから、あなたは(コンソール?)
def my_div &block
yield
end
my_div { puts "Something" }
う出力「何か」を印刷したい場合
しかし: あなたの方法のアイデアは何ですか? DIVを出力しますか?
wepposははるかに良い答えがあります8) –