Railsのscaffoldで自動で設定される単数系/複数形がおかしい場合の対処
状況
JazzCafeモデルを作ろうとすると、自動で認識される複数形がjazz_cavesになってしまう。
code: ターミナル
rails g scaffold JazzCafe name:string
invoke active_record
create db/migrate/20240419024225_create_jazz_caves.rb
create app/models/jazz_cafe.rb
invoke test_unit
create test/models/jazz_cafe_test.rb
create test/fixtures/jazz_caves.yml
invoke resource_route
route resources :jazz_caves
invoke scaffold_controller
create app/controllers/jazz_caves_controller.rb
invoke erb
create app/views/jazz_caves
create app/views/jazz_caves/index.html.erb
create app/views/jazz_caves/edit.html.erb
create app/views/jazz_caves/show.html.erb
create app/views/jazz_caves/new.html.erb
create app/views/jazz_caves/_form.html.erb
create app/views/jazz_caves/_jazz_cafe.html.erb
invoke resource_route
invoke test_unit
create test/controllers/jazz_caves_controller_test.rb
create test/system/jazz_caves_test.rb
invoke helper
create app/helpers/jazz_caves_helper.rb
invoke test_unit
invoke jbuilder
create app/views/jazz_caves/index.json.jbuilder
create app/views/jazz_caves/show.json.jbuilder
create app/views/jazz_caves/_jazz_cafe.json.jbuilder
cafeの複数形がcafesではなくcavesになってしまっているようなので、複数形のルールを独自に設定する。
code: config/initializers/inflections.rb
ActiveSupport::Inflector.inflections(:en) do |inflect|
# cafeの複数形がcafesになるようにルールを設定
inflect.irregular "cafe", "cafes"
end
--force-pluralオプションについて
なお、モデル作成時の--force-pluralオプションは、モデル名として指定した複数形をそのままモデル名(つまりRubyのクラス名)として使うようにできる。
code: ターミナル
❯ rails g model -h
Usage:
Options:
(中略)
code: ターミナル
❯ rails g scaffold JazzCafes name:string --force-plural
invoke active_record
create db/migrate/20240419024627_create_jazz_cafes.rb
create app/models/jazz_cafes.rb
invoke test_unit
create test/models/jazz_cafes_test.rb
create test/fixtures/jazz_cafes.yml
invoke resource_route
route resources :jazz_cafes
invoke scaffold_controller
create app/controllers/jazz_cafes_controller.rb
invoke erb
create app/views/jazz_cafes
create app/views/jazz_cafes/index.html.erb
create app/views/jazz_cafes/edit.html.erb
create app/views/jazz_cafes/show.html.erb
create app/views/jazz_cafes/new.html.erb
create app/views/jazz_cafes/_form.html.erb
create app/views/jazz_cafes/_jazz_cafes.html.erb
invoke resource_route
invoke test_unit
create test/controllers/jazz_cafes_controller_test.rb
create test/system/jazz_cafes_test.rb
invoke helper
create app/helpers/jazz_cafes_helper.rb
invoke test_unit
invoke jbuilder
create app/views/jazz_cafes/index.json.jbuilder
create app/views/jazz_cafes/show.json.jbuilder
create app/views/jazz_cafes/_jazz_cafe.json.jbuilder
↑のViewのディレクトリ名やController名などはいい感じだが、Modelのファイル名およびクラス名が複数形で指定されてしまう。
code: jazz_cafes.rb
class JazzCafes < ApplicationRecord
end
このオプションをつけて実行したscaffoldの生成物を消す時は、destroyする際も同じオプションをつける必要がある。
code: ターミナル
❯ rails destroy scaffold JazzCafes
WARNING The model name 'JazzCafes' was recognized as a plural, using the singular 'JazzCafe' instead. Override with --force-plural or setup custom inflection rules for this noun before running the generator. invoke active_record
remove db/migrate/20240419030925_create_jazz_caves.rb
remove app/models/jazz_cafe.rb
invoke test_unit
remove test/models/jazz_cafe_test.rb
remove test/fixtures/jazz_caves.yml
invoke resource_route
route resources :jazz_caves
invoke scaffold_controller
remove app/controllers/jazz_caves_controller.rb
invoke erb
remove app/views/jazz_caves
remove app/views/jazz_caves/index.html.erb
remove app/views/jazz_caves/edit.html.erb
remove app/views/jazz_caves/show.html.erb
remove app/views/jazz_caves/new.html.erb
remove app/views/jazz_caves/_form.html.erb
remove app/views/jazz_caves/_jazz_cafe.html.erb
invoke resource_route
invoke test_unit
remove test/controllers/jazz_caves_controller_test.rb
remove test/system/jazz_caves_test.rb
invoke helper
remove app/helpers/jazz_caves_helper.rb
invoke test_unit
invoke jbuilder
remove app/views/jazz_caves
remove app/views/jazz_caves/index.json.jbuilder
remove app/views/jazz_caves/show.json.jbuilder
remove app/views/jazz_caves/_jazz_cafe.json.jbuilder
code: ターミナル
❯ rails destroy scaffold JazzCafes --force-plural
invoke active_record
remove db/migrate/20240419024627_create_jazz_cafes.rb
remove app/models/jazz_cafes.rb
invoke test_unit
remove test/models/jazz_cafes_test.rb
remove test/fixtures/jazz_cafes.yml
invoke resource_route
route resources :jazz_cafes
invoke scaffold_controller
remove app/controllers/jazz_cafes_controller.rb
invoke erb
remove app/views/jazz_cafes
remove app/views/jazz_cafes/index.html.erb
remove app/views/jazz_cafes/edit.html.erb
remove app/views/jazz_cafes/show.html.erb
remove app/views/jazz_cafes/new.html.erb
remove app/views/jazz_cafes/_form.html.erb
remove app/views/jazz_cafes/_jazz_cafes.html.erb
invoke resource_route
invoke test_unit
remove test/controllers/jazz_cafes_controller_test.rb
remove test/system/jazz_cafes_test.rb
invoke helper
remove app/helpers/jazz_cafes_helper.rb
invoke test_unit
invoke jbuilder
remove app/views/jazz_cafes
remove app/views/jazz_cafes/index.json.jbuilder
remove app/views/jazz_cafes/show.json.jbuilder
remove app/views/jazz_cafes/_jazz_cafe.json.jbuilder
参考にさせていただきました。