2017-01-10 13 views
2

同じIDを持つファーストネームとラストネームを取得しようとしています。
私のテーブルのスキーマは次のようになります。collection_select concat同じIDを持つfirstnameとlastname

| 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でこれらの値を連結し、FIRSTNAME(Sを注文することができます)そして姓?

答えて

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、 ' ')
  • オラクル:LISTAGG(sources.name、'')
+0

どうもありがとう、あなたは他のデータベースを使用する場合。あなたの解決策は、少し修正して私のために働きます;) '' '' '' ''名前として名前.name.select( "name.nameable_id、GROUP_CONCAT(names.value)")f.collection_select(:names.nameable_type、names .nameable_id ")、:nameable_id、:name、prompt:true'' – toxic2302

関連する問題