Rails ActiveRecord: PG:: Ошибка: ОШИБКА: ссылка на столбец "created_at" неоднозначна - программирование
Подтвердить что ты не робот

Rails ActiveRecord: PG:: Ошибка: ОШИБКА: ссылка на столбец "created_at" неоднозначна

Я борюсь с ошибкой в ​​объекте и не уверен, где проблема.

Вот как выглядят модели:

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-запрос (ниже сообщения об ошибке) кажется прекрасным, но что вызывает сообщение об ошибке?

Спасибо заранее.

4b9b3361

Ответ 1

Вероятно, это поле created_at в вашей таблице car_colors. created_at должен быть cars.created_at, чтобы устранить двусмысленность.

Ответ 2

Определите область видимости следующим образом:

scope :scope_age, -> { order(created_at: :desc) }

а не:

scope :scope_age, -> { order("created_at DESC") }

Он устраняет неоднозначность, используя свойство модели, в которой определяется область видимости.

Ответ 3

Не удаляйте метки времени из модели объединения, они не являются проблемой - проблема в том, что что-то добавляет условие к вашему запросу:

AND (created_at > '2013-05-03 12:28:36.551058')

Начиная с месяца назад, найдите свой код для one.month.ago и посмотрите, отображается ли он в каких-либо областях, возможно, в моделях ваших автомобилей или car_colors. Проверяйте области вручную, если при поиске ничего не появляется.

Удаление временных меток заставит ваш запрос работать, но это не правильно.