collection_select имя и фамилия concat с одинаковым идентификатором

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

| id | nameable_id | nameable_type | value | type      |
| 1  | 2           | Person        | John  | Firstname |
| 2  | 2           | Person        | Doe   | Lastname  |

Я хочу использовать collection_select с ожидаемым результатом:

<select name="source[person_id]" id="source_person_id">
<option value="2">John Doe</option></select>`

Как я могу объединить эти значения с тем же nameable_id и заказать имя (имена), а затем фамилию (ы)?

1 ответ

Решение

Попробуй это:

collection_select(:source, :person_id, Source.select("sources.id, GROUP_CONCAT(sources.value separator ' ') as name").group("sources.nameable_type,sources.nameable_id"), :id, :name, prompt: true)

Group_concat предназначен только для MySQL. Если вы используете чужую базу данных:

  • PostgreSQL: string_agg (sources.name, '')
  • Oracle: listagg (sources.name, '')
Другие вопросы по тегам