Ruby's on rails - 在地图中使用分隔符。

时间:2015-03-23 22:29:27

标签: ruby-on-rails ruby join mapping super

我有以下方法,

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

提供商有以下架构,

"providers": [
  {
    "name": "",
    "relationship": ""
  }
 ]

如果providers数组没有名称,那么我得到--就好了。如果所有元素都有名称,那么我会得到name1,name2,name3之类的东西。多数民众赞成也好。但是当我有一个名字提供者和一个没有名字的提供者时,我得到name1,,name2。当我使用空元素进行连接时,如何删除这些逗号。我如何构建逻辑。请帮助,

提前致谢

2 个答案:

答案 0 :(得分:1)

使用compact来避免数组中的任何nil值。

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" ]

答案 1 :(得分:1)

我认为你正在寻找这样的东西:

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

我希望它有所帮助。