首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Rails ActiveRecord: PG::Error: ERROR:列引用"created_at“不明确

Rails ActiveRecord: PG::Error: ERROR:列引用"created_at“不明确
EN

Stack Overflow用户
提问于 2013-06-03 20:39:43
回答 3查看 21.9K关注 0票数 30

我正在与object中的错误作斗争,根本不确定问题出在哪里。

以下是模型的外观:

代码语言:javascript
复制
class Car < ActiveRecord::Base  
  has_many :car_colors
  has_many :colors, :through => :car_colors
end

class CarColor < ActiveRecord::Base
  belongs_to :color
  belongs_to :car
end

class Color < ActiveRecord::Base  
  has_many :car_colors
  has_many :cars, :through => :car_colors
end

下面是查询:

代码语言:javascript
复制
@cars = Car.all(:joins => :car_colors, :conditions => { :car_colors => {:color_id => params[:id_number]}}, :order => "cars.created_at DESC")

和错误输出:

代码语言:javascript
复制
PG::Error: ERROR:  column reference "created_at" is ambiguous
LINE 1: ...d" WHERE "car_colors"."color_id" = 2 AND (created_at...
                                                             ^
: SELECT "cars".* FROM "cars" INNER JOIN "car_colors" ON "car_colors"."car_id" = "cars"."id" WHERE "car_colors"."color_id" = 2 AND (created_at > '2013-05-03 12:28:36.551058') ORDER BY cars.created_at DESC

生成的SQL查询(在错误消息下面)似乎没有问题,但是是什么导致了错误消息呢?

提前谢谢你。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-03 20:46:10

您的car_colors表中可能有一个created_at字段。为了消除歧义,created_at可能应该是cars.created_at

票数 54
EN

Stack Overflow用户

发布于 2014-06-18 05:52:14

如下定义一个作用域:

代码语言:javascript
复制
scope :scope_age, -> { order(created_at: :desc) }

而不是:

代码语言:javascript
复制
scope :scope_age, -> { order("created_at DESC") }

它通过使用定义作用域的模型的属性来消除歧义。

票数 26
EN

Stack Overflow用户

发布于 2013-06-03 22:18:31

不要从连接模型中删除您的时间戳,它们不是问题所在--问题是某些东西正在向您的查询添加一个条件:

代码语言:javascript
复制
AND (created_at > '2013-05-03 12:28:36.551058')

因为日期是一个月前,所以在代码中搜索one.month.ago,看看它是否出现在任何作用域中,可能是在您的汽车或car_colors车型中。如果搜索没有找到,请手动检查作用域。

删除时间戳将使您的查询正常工作,但这不是正确的做法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16896937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档