Ruby
Rails
Rails6

Rails6 のちょい足しな新機能を試す19(model の単数形と複数形変換警告編)


はじめに

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.



pluralizesingularize

(ここからはオマケです。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 を編集してみます。


config/initializers/inflections.rb

ActiveSupport::Inflector.inflections(:en) do |inflect|

inflect.irregular 'cache', 'caches'
end


pluralizesingularize をもう一度確認する

cache(s) の pluralizesingularize をもう一度調べてみると、今度は 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


参考情報