30

オブジェクトのエラーに苦労していますが、どこに問題があるのか​​ まったくわかりません。

モデルは次のようになります。

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 クエリ (エラー メッセージの下) は問題ないように見えますが、エラー メッセージの原因は何ですか?

前もって感謝します。

4

3 に答える 3

27

次のようにスコープを定義します。

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

それよりも:

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

スコープが定義されているモデルのプロパティを使用して、あいまいさを取り除きます。

于 2014-06-17T21:52:13.927 に答える
1

結合モデルからタイムスタンプを削除しないでください。それらは問題ではありません。問題は、何かがクエリに条件を追加していることです。

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

日付は 1 か月前なので、コードを検索one.month.agoしてスコープに表示されるかどうかを確認します。おそらく、車または car_colors モデルに表示されます。検索で何も見つからない場合は、スコープを手動で確認してください。

タイムスタンプを削除するとクエリが機能しますが、これは正しいことではありません。

于 2013-06-03T14:18:30.733 に答える