我想做一个像下面这样的帮手.
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 %>
如果需要连接输出,请使用capture 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 %>