如何使用块创建帮助程序?

Sam*_*ong 9 ruby ruby-on-rails helper

我想做一个像下面这样的帮手.

def my_div some_options, &block
  # How do I print the result of the block?
end

Sim*_*tti 17

你应该使用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 %>
Run Code Online (Sandbox Code Playgroud)

如果需要连接输出,请使用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 %>
Run Code Online (Sandbox Code Playgroud)