Rails ActiveRecord: PG :: Erreur: ERREUR: la référence de colonne "created_at" est ambigu
J'ai du mal avec l'erreur dans l'objet et ne sais pas du tout où est le problème.
C'est la façon dont les modèles ressemble:
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
Voici la requête:
@cars = Car.all(:joins => :car_colors, :conditions => { :car_colors => {:color_id => params[:id_number]}}, :order => "cars.created_at DESC")
Et la sortie d'erreur:
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
Le SQL généré requête (ci-dessous le message d'erreur) semble être bien, mais ce qui provoque le message d'erreur?
Vous en remercie d'avance.
source d'informationauteur user984621
Vous devez vous connecter pour publier un commentaire.
Probablement un champ created_at dans votre
car_colors
table.created_at
devrait probablement êtrecars.created_at
pour supprimer l'ambiguïté.Définir un champ comme ceci:
plutôt que:
Il supprime l'ambiguïté en utilisant la propriété du modèle dans lequel le champ d'application est défini.
Ne retirez pas votre horodateurs de la jointure modèle, ils ne sont pas le problème - le problème, c'est que quelque chose est l'ajout d'une condition à votre requête:
Depuis la date de l'est il y a un mois, la recherche de votre code pour
one.month.ago
et voir si elle apparaît dans toutes portées, probablement dans vos voitures ou car_colors modèles. Vérifier les étendues manuellement si rien ne se passe par le biais de la recherche.Enlever les horodateurs seront faites votre recherche de travail, mais ce n'est pas la bonne chose à faire.