2017-01-10 2 views
2

동일한 ID를 가진 성 및 성을 얻으려고합니다.
내 테이블 스키마는 다음과 같습니다collection_select concat 동일한 ID의 성 및 성

| 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을 주문의) 그리고 성 (lastname (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

고마워요 당신은 다른 데이터베이스를 사용하는 경우. 당신의 해결책은 조금 수정해도 나를 위해 작동한다;) ''f.collection_select (: person_id, Name.select ("names.nameable_id, GROUP_CONCAT (names.value) as name"). group ("names.nameable_type, names .nameable_id "), : nameable_id, : name, 프롬프트 : true'' – toxic2302