状況
一見問題なさそうだが
User.hoge_method
でUser
モデルではなく、Parameters::User:Module
のUser
が呼ばれてしまっているためエラーが起きている。
moduleとクラス名が同一のため起きていると考えられる。
class User
def hoge_method
puts 'hogeメソッドを実行'
end
end
module Parameters
module User
class ProfileParameter
def fuga_method
User.hoge_method
end
end
end
end
end
NoMethodError:
undefined method `hoge_method' for Parameters::User:Module
解決法
クラス名の前に::
をつける。
ちなみに外部の定数を呼び出すときにも同じ::
を使用する。
module Parameters
module User
class ProfileParameter
def fuga_method
::User.hoge_method
end
end
end
end
end
Laravelだったら
moduleは使ったことがないが、もしLaravelで同一名のクラスなどを定義するとき
use App\Models\User as ModelUser;
のように別名を定義できるので便利。