我正在努力解决对象中的错误,并且根本不确定问题在哪里。
这就是模型的样子:
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
以下是查询:
@cars = Car.all(:joins => :car_colors, :conditions => { :car_colors => {:color_id => params[:id_number]}}, :order => "cars.created_at DESC")
错误输出:
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查询(在错误消息下面)似乎没问题,但是导致错误消息的原因是什么?
提前谢谢。
答案 0 :(得分:38)
car_colors
表中可能有一个created_at字段。 <{1}}应该是created_at
以消除歧义。
答案 1 :(得分:22)
定义这样的范围:
scope :scope_age, -> { order(created_at: :desc) }
而不是:
scope :scope_age, -> { order("created_at DESC") }
它通过使用定义范围的模型的属性来消除歧义。
答案 2 :(得分:1)
不要从连接模型中删除时间戳,它们不是问题 - 问题是某些内容正在为查询添加条件:
AND (created_at > '2013-05-03 12:28:36.551058')
由于日期是一个月前,请搜索您的代码one.month.ago
,看看它是否出现在任何范围内,可能在您的汽车或car_colors模型中。如果搜索中没有任何内容,请手动检查范围。
删除时间戳将使您的查询正常工作,但这不是正确的做法。