オブジェクトのエラーに悩んでいて、どこに問題があるのかまったくわかりません。
モデルは次のようになります。
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クエリ(エラーメッセージの下)は問題ないようですが、エラーメッセージの原因は何ですか。
前もって感謝します。
おそらくcar_colors
テーブルにcreated_atフィールドがあります。あいまいさをなくすには、created_at
をcars.created_at
にする必要があります。
次のようにスコープを定義します。
scope :scope_age, -> { order(created_at: :desc) }
のではなく:
scope :scope_age, -> { order("created_at DESC") }
スコープが定義されているモデルのプロパティを使用して、あいまいさを取り除きます。
結合モデルからタイムスタンプを削除しないでください。それらは問題ではありません。問題は、クエリに条件が追加されていることです。
AND (created_at > '2013-05-03 12:28:36.551058')
日付は1か月前なので、コードでone.month.ago
を検索し、それがすべてのスコープ、たとえば、carsまたはcar_colorsモデルにあるかどうかを確認します。検索で何も見つからない場合は、スコープを手動で確認してください。
タイムスタンプを削除するとクエリは機能しますが、適切な方法ではありません。