如何创建带有块的助手?
我想做一个像下面这样的助手。
def my_div some_options, &block # How do I print the result of the block? end
I want to make a helper like the following.
def my_div some_options, &block # How do I print the result of the block? end
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您应该使用 CaptureHelper。
如果需要连接输出,请使用 capture + concat。
如果您需要捕获然后重用内容,请使用捕获。 如果您的块没有明确使用 <%=,那么您必须调用 concat (首选方式)。
这是如果用户不是管理员则隐藏内容的方法示例。
You should use CaptureHelper.
Use capture + concat if you need to concat the output.
Use capture if you need to capture and then reuse the content. If your block doesn't explicitely use <%=, then you MUST call concat (preferred way).
This is an example of a method that hides the content if the user it not an admin.
所以有两件事很重要:
content_tag
(和content_for
)中不是字符串的任何内容,Array#join (等),因为它会产生不安全的字符串,所以您需要使用
safe_join
和content_tag
来获得安全字符串,capture
> 或concat
在我的例子中。可以像这样使用:(
这很苗条,但也可以与 erb 配合使用)
so two things that are important:
content_tag
(andcontent_for
)Array#join
(etc.) because it produces unsafe strings, you need to usesafe_join
andcontent_tag
to have safe stringscapture
orconcat
in my case.this can be used like this:
(this is slim but works fine with erb too)
http://www.rubycentral.com/book/tut_containers.html
yield 语句将返回通过的块的结果。 所以如果你想打印(控制台?)
会输出“Something”
但是:
你的方法的想法是什么? 输出 DIV?
http://www.rubycentral.com/book/tut_containers.html
The yield statement will return the result of the block passed. So if you wanted to print (console?)
Would output "Something"
But:
What is the idea of your method? Outputting a DIV?