😇

[Rails] is not a moduleがでたとき

2021/01/13に公開

rails consoleでclassをrequireするときにエラーが発生したので
備忘録としてまとめておきます。

事象

ビジネスロジックをclassに書きました。
namespaceを与えるため、module内にネストしています。

# lib/tasks/ranking/point_aggregation.rb

module Ranking
  class PointAggregation
    ...
  end
end

これをコンソールでテストしたかったので、requireを試したところ
下記エラーが発生しました。

[1] pry(main)> require 'ranking/point_aggregation'
TypeError: Ranking is not a module



Rankingはモジュールではない、というエラーのようです。




原因

Rankingというモデルが存在しているのにも関わらず、module名に使ってしまったのが原因だったようです。

Rankingモデルを作成すると、Rankingという定数が存在するようになります。
既に存在しているにも関わらず、module Rankingとして再定義しようとしたためエラーが発生したみたいです。


解決策

module名とフォルダ名を変更しました。
※下記はmodule名変更に合わせてclass名も変更しています

# lib/tasks/ranking_point/aggregation.rb

module RankingPoint
  class Aggregation
    ...
  end
end

コンソールでテスト

[1] pry(main)> require 'ranking_point/aggregation'
true

無事requireできました!

Discussion