使用 Yield 和 Ruby 包装 HTML 标签

Posted

技术标签:

【中文标题】使用 Yield 和 Ruby 包装 HTML 标签【英文标题】:Wrapping HTML tags using Yield with Ruby 【发布时间】:2021-12-01 23:19:38 【问题描述】:

这里是 Ruby 初学者。

我正在尝试了解 yield 以及如何将 html 标签包裹在它周围,但我一直遇到此代码的问题。

def tag (tag_name, attributes = nil)
  "<#tag_name#attributes>#yield</#tag_name>"
end


style_tag = tag("div", ["class=", "red"]) do
  tag("h1") do
    "Google it"
  end
end

我的输出是:

 "<div[\"class=\", \"red\"]><h1>Google it</h1></div>"

谢谢

【问题讨论】:

您的示例和输出不匹配。 抱歉,这是一个之前的例子:输出是:"

Google it

"
不要把它放在评论中,编辑你的问题,这样它就不会丢失。 已编辑!感谢您的警告! 现在只需再次添加您的预期输出,以便人们知道您真正想要什么;) 【参考方案1】:

问题不在于yield 似乎工作正常,而在于属性参数。或者更确切地说,将参数插入到字符串中。

目前你正在做一个隐含的Array.to_s,这就是括号的来源。如果您确定属性字符串是正确的,您可以执行简单的...#attributes.join ... 将所有元素连接到正确的字符串(前提是 HTML 语法正确等等)。

【讨论】:

以上是关于使用 Yield 和 Ruby 包装 HTML 标签的主要内容,如果未能解决你的问题,请参考以下文章

ruby 疑难点之—— yield 和 yield self

Ruby on Rails 如何使用 yield 进行布局?

为啥我不能在 Ruby 中将块传递给 proc?

Ruby 中的块和产量

JSP,能不能像Ruby/Rails/Erb中的yield, layout, content_for一样工作

浅谈ruby中的block及yield