ActiveSupport に名詞の複数形の不規則変化ルールを教える
この連休中, Ruby の Padrino というフレームワークを使って Web サービスを作っています.
その中で Cafe というモデルが必要で, それ用の管理ページを Padrino のコマンドで自動生成したところ, caves という名前のコントローラが生成されてしまいました.
なんとなくカッコ悪いので調べてみたところ, Padrino では, 名詞の複数形変化に, Rails の ActiveSupport を利用していることがわかりました.
ActiveSupport は, ロード時に String クラスに対していくつかのメソッドを追加しており, pluralize というメソッドで, 名詞の複数形への変換を行います.
pluralize メソッドについては, Padrino のコンソールを使えば簡単に確認できます.
(当然 Rails でもできるとは思いますが, 特に試してはいません)
このように, 不規則変化や, 数えられない名詞にも対応はしているのですが, cafe は caves になってしまいます.
そのあたりのルールがどう定義されているかは, ActiveSupport::Inflector.inflections を実行すればわかります.
いくつかルールが出てくるのですが, どうも以下のものが原因のようです.
どうやら **fe という名詞は複数形にすると **ves になる, というルールのようです.
確かに knife の複数形は knives ですし, wife の複数形は wives であり, 先の例でもそのようになっています.
ですが, このルールは cafe には当てはまらないので, ActiveSupport に教えてあげましょう.
Padrino においては, とりあえず ./config/boot.rb の中の Padrino.before_load ブロックの中に記述してみました.
上記の記述を追加したあとで, Padrino のコンソールを再起動し, 再び試してみました.
cafe がちゃんと cafes になるようになりました.
knife や wife のルールもちゃんと適用されています.
モデルの管理画面の自動生成時にも, ちゃんと cafes というコントローラが生成されるようになりました.
めでたしめでたし.
参考にしたページ
- Rails + Sinatra ≒ Padrino で遊ぼう! (梨木を読む)
Padrino についてはこのページで知りました.
管理画面の自動生成等についても解説されています. - Ruby on Rails - ActiveSupport - 複数形の不規則変化 (Agenda Labs)
不規則変化のルール追加についてはこのページを参考にしました.