【Rails】Railsコンソールでテーブルのインデックスを確認する

Railsコンソール内で特定のテーブルに設定しているインデックスを確認したいと思ったのでやり方をまとめます。

バージョン
  • Ruby 3.0.3
  • Rails 6.1.6.1
目次

問題

DBにインデックスが正しく貼られているか確認したかったです。

業務ではDockerを使っていますが、わざわざMySQLコンテナに入るのも面倒だなと思い、Railsコンソール内で特定のテーブルに貼られているインデックスを確認する方法を探していました。

解決方法

結論として、Railsコンソール内で以下を実行してもらえれば、指定したテーブルのインデックスが表示されます。

ApplicationRecord.connection.indexes("table_name").each do |t|
  p t.columns
end

もし確認したいモデルファイルがApplicationRecordではなくActiveRecord::Baseクラスを継承している場合、以下のように書けばOKです。

# ApplicationRecord を ActiveRecord::Baseに書き換える
ActiveRecord::Base.connection.indexes("table_name").each do |t|
  p t.columns
end

Rails5以降はApplicationRecordで、それ以前はActiveRecord::Baseクラスを継承しているはずです。

ぼくの職場では、Rails4時代からバージョンアップを続けて現在はRails6.1なのですが、諸事情によりモデルファイルの継承元をApplicationRecordにすると問題が発生するため、今でもActiveRecord::Baseが基底クラスとなっています。

おわりに

まあ実際にはRailsコンテナに入るのとDBコンテナに入るのでは対して手間は変わらないですね。

参考文献
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

未経験でSESから従業員300名以上の自社開発企業に転職しました。業務や個人開発で直面した問題や、転職・学習の経験を発信していきます。

コメント

コメントする

目次