【问题标题】:CONCAT_WS for Rails?用于 Rails 的 CONCAT_WS?
【发布时间】:2011-05-14 18:38:48
【问题描述】:

无论我使用什么语言,我总是需要显示一个由分隔符分隔的字符串列表。

假设我有一个产品集合,需要显示其名称,并用', ' 分隔。 所以我有一个产品集合,每个产品都有一个“名称”属性。我正在寻找一些 Rails 方法/帮助器(如果它不存在,也许你可以给我一些想法来以 Rails 方式构建它)将接收一个集合,一个将在每个集合项上调用的属性/方法和一个字符串作为分隔符。

但我想要的东西最后不包含分隔符,因为我将以“笔记本、计算机、键盘、鼠标”结尾,最后两个字符不应该在那里。

例如:

concat_ws(@products, :title, ", ")
#displays: Notebook, Computer, Keyboard, Mouse

当然,假设@products 有 4 个具有该名称的产品。

谢谢!

【问题讨论】:

    标签: ruby-on-rails helper concat-ws


    【解决方案1】:

    你应该试试 to_sentence 助手。

    如果你有一个数组,你可以做类似的事情

    array.to_sentence。如果您的数组有数据香蕉、苹果、巧克力,它将变为: 香蕉、苹果和巧克力。

    所以现在,如果您的 AR 模型带有一个名为的字段,您可以执行类似的操作

    MyModel.all.map { |r| r.name }.to_sentence
    

    【讨论】:

    • 我喜欢 to_sentence 帮助器,但是如何创建一个产品名称数组,其中包含来自 has_many 关系的完整 AR 对象数组?
    【解决方案2】:

    正如@VP 提到的,Array#to_sentence 在 Rails 中做得很好。它的代码在这里:

    https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/array/conversions.rb

    也就是说,它对牛津逗号的使用是有问题的 :-)

    【讨论】:

    • 是的,我不喜欢牛津逗号...幸运的是使用语言环境 (support.array.last_word_connector) 可以轻松编辑,无论如何我都需要它,因为它是一个多语言站点 =)跨度>
    【解决方案3】:
    @products.map(&:title).join(', ')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多