活动记录选择 - 模糊列名称

时间:2013-05-23 19:18:41

标签: ruby-on-rails-3

我有这个语句会出错,因为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'

3 个答案:

答案 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')...