2013-05-23 3 views
0

phone 및 area_code가 모두 id를 가진 활성 레코드 유형이기 때문에 오류가 발생하는이 문장이 있습니다. 여기가 AREA_CODE ID를 선택합니다 :활성 레코드 선택 - 모호한 열 이름

area_code_rec = @phone.area_codes.select(:id).where(:areacode => area_code).last 

ActiveRecord::StatementInvalid: ActiveRecord::JDBCError: Ambiguous column name 'id' 
+0

@phone은 무엇입니까? 전화 기록 모음입니까? 전화 활성 레코드와 area_code 활성 레코드 사이의 관계는 무엇입니까? 'has_one'? – lurker

답변

1

난 당신이 ID가 같은에서 어떤 테이블을 지정할 수 있다고 생각 :

area_code_rec = @phone.area_codes.select('phones.id').where(:areacode => area_code).last 

또는 'area_codes.id'를 사용합니다.

0

모델의 테이블 이름 대신 문자열 이름을 사용하지 않는 것이 현명 할 수 있습니다.

그래서, 루비의 메타 프로그래밍 마법의 일부 사용 :

area_code_rec = @phone.area_codes.select("#{AreaCode.table_name}.id").where(:areacode => area_code).last