平々凡々エンジニア

平凡で難しい悩みを解決

ruby on rails MissingHelperErrorについて

MissingHelperErrorは、 rails generate controller Micropostsを実行したあと起こりました。 エラー文は以下の通りです。

Missing helper file helpers//Users/xxxx/Rails_Practice/app/....

エラー内容はmicroposts_helper.rbが読み込めていませんというものでした。しかし helpersフォルダを確認するとmicroposts_helper.rb確かに存在していました。 これだけでは原因が不明だったので調べてみました。どうやらファイル名の読み込みの時にrubyのバグで 呼び出せないことがあるようです。

【Ruby on Rails】アプリケーション実行時にMissingHelperErrorが発生したときの対処法

application_helper.rbの名前を変更することで解決するようです。 私の環境でどのファイル名だとエラーが起きるのか検証してみました。( ruby '2.3.7' gem 'rails', 5.2.3')

検証内容を以下に示します。 *→は変更を示します。

読み込まれるか ファイル名変更内容
読み込まれない microposts_helper.rb→microposts_helper.rb 
読み込まれる microposts_helper.rb→helper.rb
読み込まれる microposts_helper.rb→micropostshelper.rb
読み込まれない microposts_helper.rb→helper.rb→microposts_helper.rb 

基本的にアンダーバーが入っているヘルパーファイルは読み込まれませんでした。 ファイル名を変えれば良いのですがバグがあることが心理的に不安となりストレスとなるので どうにかして直せないものかと調べました。その結果 railsのバージョンを変えるという記事を見つけました。

Ruby on Railsで'require': No such file to load -- ***_helper.rb(LoadError)と言われるとき

追記に書いてあるのですがrailsのバージョンを変えても根本的に解決したようにはならなく 他の作業で治ったような話をされていましたが試しに自分も行ってみました。

gem 'rails', '~> 5.2.3'
gem 'rails'

bundle update

私の場合は上記の手順でで治りました。 また

gem 'rails', '~> 5.2.3'

に元に戻してもエラーは出力されませんでした。

結論としては 原因不明のエラーですがrailsのバージョンを切り替えると治るかもしれないです。

このエラーは再現性がないのでとりあえずはこれでいこうと思います。 またわかり次第記事にしたいと思います。