在Ruby helper中将html类与默认值合并
我正在尝试编写一个Ruby助手来输出SVG精灵 通过在Ruby helper中将html类与默认值合并,html,ruby-on-rails,ruby,helper,params,Html,Ruby On Rails,Ruby,Helper,Params,我正在尝试编写一个Ruby助手来输出SVG精灵 通过选项(类:“某些类”)传入的类似乎不会被合并和输出 def ui_svg(icon_classes, size = false, options = {}) options = { class: icon_classes, "aria-hidden" => true, role: "presentation", width: (size ? size : nil), height: (size
选项
(类:“某些类”
)传入的类似乎不会被合并和输出
def ui_svg(icon_classes, size = false, options = {})
options = {
class: icon_classes,
"aria-hidden" => true,
role: "presentation",
width: (size ? size : nil),
height: (size ? size : nil)
}
content_tag(:svg, options.merge( options ) ) do
content_tag(:use, nil, "xlink:href" => "#" + icon_classes)
end
end
如果我只调用=ui_svg“图标信封”,16
我会得到正确的输出:
<svg class="icon-envelope" aria-hidden="true" role="presentation" width="16" height="16">
<use xlink:href="#icon-envelope"></use>
</svg>
如何确保
图标_类
和通过选项
传入的类都在最外层的内容标签
上输出?您有两个同名的不同变量选项
,一个来自方法参数列表,另一个在方法体中定义。后者掩盖了前者。重命名其中一个变量
def ui_svg(icon_classes, size = false, options = {})
svg_tag_options = options.merge(
:class => [icon_classes, options[:class]].reject(&:blank?).join(" "),
"aria-hidden" => true,
:role => "presentation",
:width => (size ? size : nil),
:height => (size ? size : nil)
)
content_tag(:svg, svg_tag_options) do
content_tag(:use, nil, "xlink:href" => "#" + icon_classes)
end
end
更新
代码已更新以响应编辑的问题。您有两个不同的变量,它们具有相同的名称
选项
,一个来自方法参数列表,另一个在方法体中定义。后者掩盖了前者。重命名其中一个变量
def ui_svg(icon_classes, size = false, options = {})
svg_tag_options = options.merge(
:class => [icon_classes, options[:class]].reject(&:blank?).join(" "),
"aria-hidden" => true,
:role => "presentation",
:width => (size ? size : nil),
:height => (size ? size : nil)
)
content_tag(:svg, svg_tag_options) do
content_tag(:use, nil, "xlink:href" => "#" + icon_classes)
end
end
更新
代码已更新,以响应编辑后的问题。我以前尝试过此操作。如果我使用下面的
=ui\u svg“icon信封”,16,class:“icon large”
应用于最外层内容标签的类是icon large
,不包括icon信封
。您对OP的编辑澄清了问题。我已经更新了我的答案,.join()
之后缺少一个逗号,但是是的,这正是我要找的。我以前尝试过这个。如果我使用下面的=ui\u svg“icon信封”,16,class:“icon large”
应用于最外层内容标签的类是icon large
,不包括icon信封
。您对OP的编辑澄清了问题。我已经更新了我的答案,.join()
之后缺少一个逗号,但是是的,这正是我想要的。