Active Recordのモデル名が異なっているエラー

Active Recordのモデル名が異なっているエラー Active Record関連でハマってしまったことがあった為、こちらにまとめます

rails c実行時に以下のようにエラーになってしまいました。

$ rails c
Loading development environment (Rails 6.0.4.1)

irb(main):002:0> FishHandleInformation.first
Traceback (most recent call last):
        1: from (irb):2
NameError (uninitialized constant FishHandleInformation)
Did you mean?  FishHandleInfomation

[FishHandleInformation]というモデル名に対して、[first]というクラスメソッドを使いましたが、

Did you mean?  FishHandleInfomation

上記のように言われてしまい、[FishHandleInfomation]というモデル名じゃ無いですか?と記述されている
提案されているモデル名は、[r]が抜けている

モデル名を確認してみると以下のようになっており、[rails c]で実行したモデル名と一緒でした

[app/models/fish_handle_infomation.rb]

class FishHandleInformation < ApplicationRecord
  belongs_to :fish
  belongs_to :handle
  validates :fish_id, uniqueness: { scope: :handle_id }
  validates :handle_time, presence: true
  validates :handle_url, presence: true
end

念の為、[schema.rb]を確認してみると以下のようになっておりrailsの定義通りのテーブル名になっているので、問題がなさそう

[db/schema.rb]

  create_table "cooking_informations", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", force: :cascade do |t|
    t.bigint "cooking_id", null: false
    t.bigint "fish_id", null: false
    t.string "image"
    t.integer "cooking_time", null: false
    t.string "cooking_url"
    t.bigint "handle_id", null: false
    t.datetime "created_at", precision: 6, null: false
    t.datetime "updated_at", precision: 6, null: false
    t.index ["cooking_id"], name: "index_cooking_informations_on_cooking_id"
    t.index ["fish_id"], name: "index_cooking_informations_on_fish_id"
    t.index ["handle_id"], name: "index_cooking_informations_on_handle_id"
  end

色々と調べてみると、ファイル名が以下のようになっていた([r]が抜けていた)

Image from Gyazo

正しくは、[fish_handle_information.rb]になる

ファイル名を[fish_handle_information.rb]に直したら、以下のように[rails c]で正しくActive Recordが使えるようになった

$ rails c
Loading development environment (Rails 6.0.4.1)

irb(main):001:0> FishHandleInformation.first
  FishHandleInformation Load (0.4ms)  SELECT `fish_handle_informations`.* FROM `fish_handle_informations` ORDER BY `fish_handle_informations`.`id` ASC LIMIT 1
=> nil

恐らくActive Recordを使う時は、モデル名だけでなくファイル名も関係するということだろう