はじめに
Rails 6 に追加されそうな新機能を試す第19段。 今回のちょい足し機能は、 model の単数形と複数形変換警告編です。
Rails 6.0 では、単数形と複数形が不規則な場合に model を作成する際に警告が出るようになりました。
記載時点では、Rails は 6.0.0.rc1 で確認しました。Rails 6.0.0.rc1 は gem install rails --prerelease
でインストールできます。
$ rails --version
Rails 6.0.0.rc1
Railsプロジェクトを作る
$ rails new rails6_0_0rc1
$ cd rails6_0_0rc1
Cache model を作ります
実際に試すために Cache モデルを作ってみます。
単数形は cache で複数形は caches です。
$ bin/rails g model Cache name
Running via Spring preloader in process 49
[WARNING] Rails cannot recover singular form from its plural form 'Caches'.
Please setup custom inflection rules for this noun before running the generator in config/initializers/inflections.rb.
invoke active_record
create db/migrate/20190518013544_create_caches.rb
create app/models/cache.rb
invoke test_unit
create test/models/cache_test.rb
create test/fixtures/caches.yml
以下の警告が出ていることがわかりますね。
[WARNING] Rails cannot recover singular form from its plural form 'Caches'.
Please setup custom inflection rules for this noun before running the generator in config/initializers/inflections.rb.
pluralize
と singularize
(ここからはオマケです。Rails6のちょい足し機能ではなくて、それより前のバージョンからある機能です。)
cache(s) の pluralize と singularize を調べてみましょう
$ bin/rails c
Running via Spring preloader in process 63
Loading development environment (Rails 6.0.0.rc1)
irb(main):001:0> "cache".pluralize
=> "caches"
irb(main):002:0> "caches".singularize
=> "cach"
cache
を複数形にすると caches
になりますが、 caches
を単数形にすると cach
になり元に戻りません。
config/initializers/inflections.rb
を編集する
警告に従って config/initializers/inflections.rb
を編集してみます。
ActiveSupport::Inflector.inflections(:en) do |inflect|
inflect.irregular 'cache', 'caches'
end
pluralize
と singularize
をもう一度確認する
cache(s) の pluralize
と singularize
をもう一度調べてみると、今度は caches
の単数形が cache
になり元に戻ります。
# bin/rails c
Running via Spring preloader in process 137
Loading development environment (Rails 6.0.0.rc1)
irb(main):001:0> "cache".pluralize
=> "caches"
irb(main):002:0> "caches".singularize
=> "cache"
個人的に思うこと
今回のちょい足し機能は非常に開発者フレンドリーで良い機能だと思いました。
その一方で、単数形と複数形が規則的でない単語を model に使うのは避けた方が無難だと思ってます。
ソースコード
試したソースは以下にあります。
https://github.com/suketa/rails6_0_0rc1/tree/try019_db_singular_and_plural_warning