2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

はじめに

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

参考情報

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?