⛳
Railsのscaffoldで単数形/複数形のどっちを使うべきか
概要
「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
余談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
おんなじファイルが作成されております。
参考記事
Discussion