CONCAT_WS для Rails?

Независимо от того, какой язык я использую, мне всегда нужно отображать список строк, разделенных каким-либо разделителем.

Допустим, у меня есть коллекция продуктов, и мне нужно отобразить ее названия, разделенные ', ', Итак, у меня есть коллекция продуктов, каждый из которых имеет атрибут "имя". Я ищу какой-нибудь метод / помощник по Rails (если он не существует, может быть, вы можете дать мне идеи для его построения рельсовым способом), который получит коллекцию, атрибут / метод, который будет вызываться для каждого элемента коллекции и строка для разделителя.

Но я хочу что-то, что не включает разделитель в конце, потому что я закончу "Ноутбук, Компьютер, Клавиатура, Мышь", чтобы не было двух последних символов.

Пример:

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

Предположим, что у @products есть 4 продукта с такими названиями.

Спасибо!

3 ответа

Решение

Вы должны попробовать помощник to_sentence.

Если у вас есть массив, вы можете сделать что-то вроде

array.to_sentence. Если в вашем массиве есть данные банан, яблоко, шоколад, то он станет: банан, яблоко и шоколад.

Так что теперь, если у вас есть модель AR с именем поля, вы можете сделать что-то вроде

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

Как уже упоминалось @VP, Array#to_sentence хорошо выполняет эту работу в рельсах. Код для этого здесь:

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

Сказав это, использование Оксфордской запятой сомнительно:-)

@products.map(&:title).join(', ')
Другие вопросы по тегам