Ruby on rails 路轨上的Ruby-在地图中使用分隔符。

Ruby on rails 路轨上的Ruby-在地图中使用分隔符。,ruby-on-rails,ruby,join,mapping,super,Ruby On Rails,Ruby,Join,Mapping,Super,我有下面的方法, def providers if super && super.any?(&:name) super.map(&:name).join(",<br>").html_safe else "--" end end 如果提供程序数组没有名称,那么我将得到--,这很好。如果所有元素都有名称,那么我会得到像name1、name2、name3这样的东西。那也很好。但是当我有一个有名字的提供者和一个没有名字的提供者时,

我有下面的方法,

def providers
  if super && super.any?(&:name)
    super.map(&:name).join(",<br>").html_safe
  else
    "--"
  end
end
如果
提供程序
数组没有名称,那么我将得到
--
,这很好。如果所有元素都有名称,那么我会得到像name1、name2、name3这样的东西。那也很好。但是当我有一个有名字的提供者和一个没有名字的提供者时,我会得到
name1、
、name2
。当我使用空元素进行连接时,如何去掉这些逗号。我如何构造逻辑。请帮忙

提前感谢

使用可避免数组中出现任何零值

def providers
  if super && super.any?(&:name)
    super.map(&:name).compact.join(",<br>").html_safe
  else
    "--"
  end
end

# Example
[ "a", nil, "b", nil, "c" ].compact! #=> [ "a", "b", "c" ]
def提供程序
如果超级和超级有(&:名称)
super.map(&:name).compact.join(“,
”).html\u-safe 其他的 "--" 结束 结束 #范例 [“a”,无,“b”,无,“c”]。紧凑型!#=>[“a”、“b”、“c”]
我想你正在寻找这样的东西:

def providers
  providers_with_names = super.keep_if {|p| p.name.present?}
  if providers_with_names.any?
    providers_with_names.map(&:name).join(",<br />").html_safe
  else
    "--"
  end
end
def提供程序
providers_with_names=super.keep_if{| p | p.name.present?}
如果提供程序有名称,有吗?
提供程序\u与\u names.map(&:name.join(“,
”).html\u安全 其他的 "--" 结束 结束
我希望有帮助

def providers
  providers_with_names = super.keep_if {|p| p.name.present?}
  if providers_with_names.any?
    providers_with_names.map(&:name).join(",<br />").html_safe
  else
    "--"
  end
end