2

同じ ID を持つ名と姓を取得しようとしています。
私のテーブルスキーマは次のようになります:

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

collection_select期待される出力でa を使用したい:

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

nameable_idこれらの値を同じものと連結して、姓、名の順に並べるにはどうすればよいですか?

4

1 に答える 1

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, ' ')
于 2017-01-10T15:27:02.387 に答える