【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をコピーしました!

この記事を書いた人

独学で未経験からRubyKaigiのスポンサーを務める上場企業へ転職。エンジニア歴1年8ヶ月で年収720万円の内定を2社獲得し転職。Goを使うフィンテック企業に在籍。

コメント

コメントする

目次