我想做一个像下面这样的助手。
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。 如果您需要捕获然后重用内容,请使用捕获。如果您的 block 没有明确使用 <%=,那么您必须调用 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 %>
关于ruby-on-rails - 如何使用 block 创建助手?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1047861/
相关文章:
ruby-on-rails - 如何从 Rails 中的 View 和 Controller 调用辅助方法?
three.js - 如何在threejs中通过raycaster从交叉检查中排除辅助对象?
ruby-on-rails - 如何在 ruby 的 http 请求中包含 header
java - 是什么让其他语言在快速开发方面比 Java 更快?
ruby-on-rails - 在 rails 中的 link_to 中将特定类添加到 image_tag
ruby-on-rails - Ruby - 将 CSV 中的条目插入数据库
ruby-on-rails - ruby rails : two references with different name to the same model
©2023 IT工具网