我有这个语句会出错,因为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 :(得分:1)
我相信你可以像这样指定id来自哪个表:
area_code_rec = @phone.area_codes.select('phones.id').where(:areacode => area_code).last
或使用'area_codes.id'
。
答案 1 :(得分:0)
不使用字符串名称,而是直接使用模型中的表名称可能是明智的。
所以,使用一些Ruby的MetaProgramming魔术:
area_code_rec = @phone.area_codes.select("#{AreaCode.table_name}.id").where(:areacode => area_code).last
答案 2 :(得分:0)
area_code_rec = @phone.area_codes.select('area_codes.id').where(areacode: area_code).last
我假设区号表的名称是area_codes。如果由于某种原因它是单数,那就是... select('area_code.id')...