Railsのpluralizeメソッドの挙動が気になる

今日初めて見たメソッドpluralize

  • 英訳すると意味は「複数(形)にする」

その名の通り、レシーバにとった文字列を複数形にしてくれます

 'adult'.pluralize
=> "adults"

すごい〜、でも、これでchildの複数形がchildsとか言ってきたらおもしろいな…と思いながら試してみる

 'child'.pluralize
=> "children"

おっ👀末尾がsじゃない複数形もちゃんと対応してくれている!!

そして、何やら引数count にオプションで数字を指定できるらしいのでやってみる

文字列.pluralize(count)

'day'.pluralize(2)
=> "days"

ちなみにオプションに1を取ると、単数形のままにしてくれる

'day'.pluralize(1)
=> "day"

0とか負の数でもちゃんと単数・複数を認識できるのか実験

 'day'.pluralize(0)
 => "days"

'day'.pluralize(-1)
 => "days"

 'day'.pluralize(-2)
 => "days"

🤔そこまではしてくれないらしいので調べてみると、Railsガイドに載ってた

railsguides.jp

pluralizeメソッドではオプションでcountパラメータを使えます。count == 1を指定すると単数形が返されます。countがそれ以外の値の場合は複数形を返します(訳注: 英語では個数がゼロや小数や負の数の場合は複数形で表されます)。

なるほど〜単純に1の場合しか単数にしてくれないみたい。ていうかそもそも、0とか-1とかって普通に英語だと単数なのか複数なのかわからないや。0day ? 0days ? -1day ? -1days ?

そして

Active Recordでは、モデル名に対応するデフォルトのテーブル名を求めるときにこのメソッドを使います。

らしいので、0とか負の数に対応してなくても、Rails的には困らないのかなと思った。 もし、別の用途で0-1にどうしても対応させたかったとしても、自分で条件分岐書けばなんとかできてしまいそうだしね。それか、私が知らないだけで別のもっと使えるメソッドがあるのかも。

久々にメソッドの挙動とか見てたらおもしろかった…新しい技術のキャッチアップもしなくちゃいけないけど、こういう時間も大事にしたいと思った今日でした