2回目の投稿になります。よろしくお願いします。
今回は個人アプリを作る中で起きた画面ロード時に起きたエラーについての記事を書きたいと思います。
環境
Ruby: 2.5.1
RubyOnRais: 5.0.7
エラー内容
エラー内容は以下の二つです。
① LoadError in EventsController#choise_artist
Unable to autoload constant Set_list, expected ~ FesLive-app/app/models/set_list.rb to define it.
② Name Error in EventsController#choise_artist
uninitialized constant EventsController:Setlist
解決方法
①の解決方法
まずひとつ目のエラーですが、autoloadできないと言われています。
まず、Railsのautoloadとは「命名規則に則ったファイルを自動でrequireしてくれる機能」のことです。
つまり、下の記述の @set_lists = Set_list.all は命名規則に従っていないということになります。
実はrails の命名規則ではクラス名に対してアンダーバー(_)を使うことはできません。
そのため、Set_listクラスをautoloadできませんよ〜と言われているのでした。
class EventsController < ApplicationController
def choise_artist
@set_lists = Set_list.all
@event = Event.find(params[:id])
end
end
なので、「@set_lists = Setlist.all」とすれば①のエラーに関しては突破できました。
②の解決方法
クラス名の表記の仕方を変えautoloadはできるようになりましたが、今度はNameErrorのエラーがでました。
uninitialized ⇒ 初期化されていない ⇒ クラスが使える状態が整っていないということなので、
クラス名の指定の仕方に問題がありそうだということが分かります。
実際にSetlistモデルを見に行くと、クラス名が「SetList」とLが大文字になっていました。
なので、クラス名がまちがってますよ〜と言われているのでした。
class SetList < ApplicationRecord
belongs_to :event
end
この「@set_lists = SetList.all」とすればこのエラーは突破できました。
以上、ここまで読んでくださりありがとうございました。
分かりにくい箇所やアドバイス等ありましたら、コメントくださると幸いです。では!
【参考サイト】
https://qiita.com/hirokisoccer/items/4ba62a56b18eb834a8ee
https://wa3.i-3-i.info/word16120.html