LoginSignup
4
4

More than 5 years have passed since last update.

Ransack の sort_link が MySQL で動作しない( incompatible with DISTINCT)

Posted at

はじめに

ローカルのSQLiteでの開発環境では問題なく動いていたのですが、本番環境(MySQL)にデプロイすると、Ransackを利用したソート機能で例外が発生してしまいました。
対処過程のメモを残しておきます。

エラー内容

ログに出力されているエラー内容は以下になります。

 ActionView::Template::Error (Mysql2::Error: Expression ¥#1 of ORDER BY clause is not in SELECT list, references column 'DB名.テーブル名.カラム名' which is not in SELECT list; this is incompatible with DISTINCT: 

参考URL

以下のページを参考に対処しました。感謝です。

MySQLでdistinctが効かない。mysqlバージョン5.7からの変更。

MySQLのversion確認

まずはMySQLのバージョンを確認。参考サイトの情報に該当しそうだ。。。

mysqld --version
mysqld  Ver 5.7.25 for Linux on x86_64 (MySQL Community Server (GPL))

SQLモードの確認

続いて、SQLモードの内容を確認。やはり同様である。

mysql> SELECT @@GLOBAL.sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@GLOBAL.sql_mode                                                                                                                         |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

設定を変更して動作確認

MySQLのconfigファイルを修正してsql_modeを空にする。

sudo vi /etc/my.cnf
my.cnf
[mysqld]
sql-mode=""

修正が終わったら再起動して動作確認

sudo systemctl restart mysqld.service

ソートが動作することを確認できました。

終わりに

ONLY_FULL_GROUP_BY が原因のようなので、それだけオフにすることも後々検討したい。
また、その他の項目にも是非を確認して設定を見直したい。

こういった事をきちんと出来るようになりたいと思いつつ、忙しさを言い訳にしてまずはこれで良しとしちゃいます。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4