CONCAT_WS de rieles?
-
27-09-2019 - |
Pregunta
No importa qué idioma estoy usando Siempre necesito para mostrar una lista de cadenas separadas por algún delimitador.
digamos Vamos, tengo una colección de productos y necesidad de mostrar sus nombres separados por ', '
.
Así que tengo una colección de productos, donde cada uno tiene un atributo 'nombre'. Estoy buscando algún método de rieles / ayudante (si no existe, tal vez usted me puede dar ideas para construirlo en un camino carriles) que recibirá una colección, un atributo / método que se llama en cada elemento de la colección y una cadena para el separador.
Pero yo quiero algo que no incluye el separador al final, porque voy a terminar con "portátil, ordenador, teclado, ratón," que 2 últimos caracteres no deben estar allí.
Ejemplo:
concat_ws(@products, :title, ", ")
#displays: Notebook, Computer, Keyboard, Mouse
Suponiendo @products dispone de 4 productos con que los nombres de curso.
Gracias!
Solución
que debe tratar la to_sentence ayudante.
Si usted tiene una matriz, se puede hacer algo como
array.to_sentence. Si la matriz tiene el plátano de datos, manzana, chocolate se convertirá en: plátano, manzana y chocolate.
Así que ahora si usted tiene su modelo AR con un campo de nombre, se podría hacer algo como
MyModel.all.map { |r| r.name }.to_sentence
Otros consejos
@products.map(&:title).join(', ')
Como se mencionó @VP, Array # to_sentence hace este trabajo bien en los carriles. El código para ello está aquí:
Dicho esto, su uso de la Oxford Comma es cuestionable: -)