😇
[Rails] is not a moduleがでたとき
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