はじめに
RSpecでテストを行っていたところ、下記のエラーが出て困ってしまいました。
ですので、エラーの原因と解決策をここに残したいと思います。
前提条件として、私の環境は次の通りです。
ruby 2.6.3
rails 5.2.3
エラーについて
RSpecのsystem specを実行するとエラーが発生しました。
開発環境では特にエラーは起きておらず、テストのみでしかエラーが発生していなかったので困りました。
ActionView::Template::Error:PG::AmbiguousCoulumn: ERROR: column reference "created_at" is ambiguous ...
原因
上記のエラーに関係しているコントローラーはこちらです。
tasks_controller.rb
@tasks = @tasks.joins(:labels).order("created_at: :desc")
Taskモデルに、TaskモデルとアソシエーションしているLabelモデルをjoinsで結合しています。
それによりorder("created_at desc")
が、tasksテーブルにあるcreated_at
を指しているのか、labelsテーブルにあるcreated_at
を指しているのか、曖昧( = AmbiguousCoulumn )になっていることがエラーの原因でした。
解決策
下記のどちらかの方法で、どのテーブルのcreated_at
を使うのか指定してあげます。
@tasks = @tasks.joins(:labels).order(created_at: :DESC)
@tasks = @tasks.joins(:labels).order("tasks.created_at: :desc")
参考
以上です。