我有这条语句出错,因为 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'
我有这条语句出错,因为 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'
我相信您可以像这样指定 id 来自哪个表:
area_code_rec = @phone.area_codes.select('phones.id').where(:areacode => area_code).last
或使用'area_codes.id'
.
最好不要使用字符串名称,而是直接使用模型中的表名。
所以,使用一些 Ruby 的元编程魔法:
area_code_rec = @phone.area_codes.select("#{AreaCode.table_name}.id").where(:areacode => area_code).last
area_code_rec = @phone.area_codes.select('area_codes.id').where(areacode: area_code).last
我假设区号表的名称是 area_codes。如果由于某种原因它是单数的,它将是 ...select('area_code.id')...