Railsのscaffoldで単数形/複数形のどっちを使うべきか

2023/02/10に公開

概要

rails generate scaffoldで単数形か複数形かどっちだっけ!」ってなることありません?
......え、ならない?
僕はなりました。そんな人のために、どっちがいいのかメモ書きで残します。

結論

どっちでもいい。railsがよしなに判断してくれる。

単数形の場合の実行結果
root@f4bf3e4e2f5f:/app# rails g scaffold user name:string age:integer
      invoke  active_record
      create    db/migrate/20230210054930_create_users.rb
      create    app/models/user.rb
      invoke  resource_route
       route    resources :users
      invoke  scaffold_controller
      create    app/controllers/users_controller.rb
      invoke    erb
      create      app/views/users
      create      app/views/users/index.html.erb
      create      app/views/users/edit.html.erb
      create      app/views/users/show.html.erb
      create      app/views/users/new.html.erb
      create      app/views/users/_form.html.erb
      create      app/views/users/_user.html.erb
      invoke    resource_route
      invoke    helper
      create      app/helpers/users_helper.rb
複数形の場合の実行結果
rails g scaffold users name:string age:integer
[WARNING] The model name 'users' was recognized as a plural, using the singular 'user' instead. Override with --force-plural or setup custom inflection rules for this noun before running the generator.
      invoke  active_record
      create    db/migrate/20230210055114_create_users.rb
      create    app/models/user.rb
      invoke  resource_route
       route    resources :users
      invoke  scaffold_controller
      create    app/controllers/users_controller.rb
      invoke    erb
       exist      app/views/users
      create      app/views/users/index.html.erb
      create      app/views/users/edit.html.erb
      create      app/views/users/show.html.erb
      create      app/views/users/new.html.erb
      create      app/views/users/_form.html.erb
      create      app/views/users/_user.html.erb
      invoke    resource_route
      invoke    helper
      create      app/helpers/users_helper.rb

複数形の場合、以下のwarningがでていますね。

> Warning : The model name 'users' was recognized as a plural, using the singular 'user' instead. Override with --force-plural or setup custom inflection rules for this noun before running the generator.

日本語訳すると以下になります。

Warning : モデル名 'users' が複数形として認識され、代わりに単数形の 'user' が使用されました。ジェネレータを実行する前に、-force-plural で上書きするか、この名詞のカスタム屈折ルールをセットアップしてください

つまり複数形にしても、rails側で「単数形でやっておいたよ!」ってしてくれます。もちろん出来上がるファイルもおんなじです。railsすげえ。

余談1 : 複数形でない単語が複数形と認識された場合

corpusという単語とかだと、以下のように出るらしいです。

[WARNING] The model name 'corpus' was recognized as a plural, using the singular 'corpu' instead. Override with --force-plural or setup custom inflection rules for this noun before running the generator.

そんなときは以下のコマンドを実行しましょう。

rails g scaffold corpus --force-plural

https://qiita.com/Salinger/items/c48f999d4d7211f16fce

余談2 : 大文字か小文字か

これもどっちでもいいです。

大文字での実行結果
rails g scaffold User name:string age:integer
      invoke  active_record
      create    db/migrate/20230210055635_create_users.rb
      create    app/models/user.rb
      invoke  resource_route
       route    resources :users
      invoke  scaffold_controller
      create    app/controllers/users_controller.rb
      invoke    erb
       exist      app/views/users
      create      app/views/users/index.html.erb
      create      app/views/users/edit.html.erb
      create      app/views/users/show.html.erb
      create      app/views/users/new.html.erb
      create      app/views/users/_form.html.erb
      create      app/views/users/_user.html.erb
      invoke    resource_route
      invoke    helper
      create      app/helpers/users_helper.rb

おんなじファイルが作成されております。

参考記事

https://qiita.com/Salinger/items/c48f999d4d7211f16fce

Discussion