1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

スネークケースのモデル名でしくじった話

Posted at

環境

Rails5.2
Ubuntu20.4

はじめに

モデル名の名前の付け方をしくじって、トラブル解決に時間をかけてしまった話です。始めに、モデル名に次のような、スネークケースの形式で名前を付けました。

rails g model Test_Test_1

何がいけなかったのかといえば、数字の前にアンダーバーをつけてしまったことです。なぜ、テーブル名の末尾に数字を使ったのかといえば、Test_Test_1、Test_Test_2、Test_Test_3と、いった具合に、同じテーブル名にして、連番を付けたかったためです。

このようなモデル名でテーブルを作成した後、コントローラーからそのモデルのクラスを呼び出したとき、つぎのようなエラーが発生しました。

uninitialized constant

つまり、そのような名前のクラスは存在しませんというエラーです。いや、あるんですが・・・と思っていたのですが、原因は、モデルの名前の付け方にありました。

結論を言うと、モデル名をTest_Test_1ではなく、Test_Test1で作り変えると上手くいきました。モデル名の末尾をアンダーバー+数字の形式にすると、Railsがスネークケースとして認識してくれないようです。

モデル名をスネークケースでつけると、モデルのクラス名はキャメルケースで生成されます。

テーブル名→クラス名への変換は、ActiveSupportのclassifyメソッドで行われ、クラス名→テーブル名への変換は、tableizeメソッドで行われます。

参考URL
https://techracho.bpsinc.jp/hachi8833/2017_01_11/32606

 "Test_Test_1".classify
=> "TestTest1"

ここの変換はOKです。

"TestTest1".tableize
=> "test_test1s"

あれ?、test_test_1sになってくれませんでした。このようなモデル名の付け方はよくなかったのですね。クラスがありませんというエラーが出てきていた原因が判明しました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?