賢くなりたいトイプードルの日記

データサイエンス系の話をメインにしていきます

Mysql2::Error: Column 'カラム名' in where clause is ambiguousの解決方法

Ruby On Railsアプリ開発中に”Mysql2::Error: Column 'カラム名' in where clause is ambiguous”というエラーが出た。

和訳すると、「where節の中の'カラム名'っていうカラムが曖昧です」

わかりやすく言えば、「どのテーブルの'カラム名'なのかわからないよ」ということ。テーブル結合時に起こるエラーである。

環境

Rails 4.2.6
ruby 2.3.1p112

該当のコード

new_area_products = Product.where(area_id: @product.area_id).where(“created_at > ?”, Time.current - 2.month)
if user_signed_in?
  user_dled_product_ids = DownloadLog.where(user_id: current_user.id).pluck(:product_id)
  area_products = new_area_products.where.not(id: user_dled_product_ids).where.not(id: @product.id)
  @popular_area_products = area_products.joins(:download_logs).group(:product_id).order(‘count(download_logs.product_id) desc’).limit(4)
else
  @popular_area_products = new_area_products.where.not(id: @product.id).joins(:download_logs).group(:product_id).order(‘count(download_logs.product_id) desc’).limit(4)
end

試したこと

joinsを使ってテーブル結合しているのは5行目と7行目。だから5行目以降のコードを修正してみたのだけど、エラーメッセージに変化はなかった。

解決方法

一行目”.where(“created_at > ?”, Time.current - 2.month)”のcreated_atの前に、”product.”を追加することで解決。