Rails разделяет элементы массива запятой внутри - PullRequest
1 голос
/ 20 февраля 2012

Какой самый удобный способ в Rails создать список разделенных запятыми внутри частичного?

Я только недавно обнаружил, что вы можете использовать партиалы для перебора коллекции, отправленной из другого шаблона представления.Итак, в шаблоне представления у меня есть:

<% render @dvd.director %> 

Затем в /view/directors/_director.html.erb:

<%= director.director %>

На самом деле это выглядит примерно так:

@dvd.director.each { |d| puts d.director }

Теперь я знаю, что могу использовать .join следующим образом:

<% @dvd.director.map { |t| t.director }.join(", ") %>

Но так как частичное уже проходит по каждой записи в массиве, как я могу правильно разделить списки и не иметьпоследний (или единственный) с ужасной запятой в конце?

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

Спасибо.

Edit

Чтобы попытаться объяснить немного лучше, @ dvd.director возвращает объект ActiveRelation, например, так:

[#<Director id: 13, director: "Andrew Stanton">, #<Director id: 14, director: "Lee Unkrich">]

Так что я не могупросто сделайте @dvd.director.join(', ')

Есть ли другой способ получить эти данные, кроме

@dvd.director.each { |dir| dir.director }

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

1 Ответ

5 голосов
/ 18 марта 2012

Метод join Руби не будет добавлять символ разделителя, если в массиве только один элемент.

Вы можете сделать следующее для списка любого размера:

@dvd.director.map(&:director).join(", ")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...