Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Ruby helper中将html类与默认值合并_Html_Ruby On Rails_Ruby_Helper_Params - Fatal编程技术网

在Ruby helper中将html类与默认值合并

在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

我正在尝试编写一个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 ? 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()
之后缺少一个逗号,但是是的,这正是我想要的。