Born Too Late

Yuya's old tech blog.

ActiveSupport に名詞の複数形の不規則変化ルールを教える

2011-05-04 21:33:51

この連休中, RubyPadrino というフレームワークを使って Web サービスを作っています.
その中で Cafe というモデルが必要で, それ用の管理ページを Padrino のコマンドで自動生成したところ, caves という名前のコントローラが生成されてしまいました.

なんとなくカッコ悪いので調べてみたところ, Padrino では, 名詞の複数形変化に, RailsActiveSupport を利用していることがわかりました.
ActiveSupport は, ロード時に String クラスに対していくつかのメソッドを追加しており, pluralize というメソッドで, 名詞の複数形への変換を行います.

pluralize メソッドについては, Padrinoコンソールを使えば簡単に確認できます.
(当然 Rails でもできるとは思いますが, 特に試してはいません)

このように, 不規則変化や, 数えられない名詞にも対応はしているのですが, cafecaves になってしまいます.

そのあたりのルールがどう定義されているかは, ActiveSupport::Inflector.inflections を実行すればわかります.
いくつかルールが出てくるのですが, どうも以下のものが原因のようです.

どうやら **fe という名詞は複数形にすると **ves になる, というルールのようです.
確かに knife の複数形は knives ですし, wife の複数形は wives であり, 先の例でもそのようになっています.
ですが, このルールは cafe には当てはまらないので, ActiveSupport に教えてあげましょう.

Padrino においては, とりあえず ./config/boot.rb の中の Padrino.before_load ブロックの中に記述してみました.

上記の記述を追加したあとで, Padrino のコンソールを再起動し, 再び試してみました.

cafe がちゃんと cafes になるようになりました.
knife や wife のルールもちゃんと適用されています.
モデルの管理画面の自動生成時にも, ちゃんと cafes というコントローラが生成されるようになりました.

めでたしめでたし.

参考にしたページ