久保清隆のブログ

ライフハック、健康、旅行など、役立つ情報を書きます。

Railsで単数形を複数形に変換する方法と、その変換がうまく行かない場合の対処法

単数形を複数形に、複数形を単数形にする方法

単数形と複数形の変換は以下のメソッドでできる。

  • String#pluralizeで単数形を複数形に。
  • String#singularizeで複数形を単数形に。

テーブル名などで複数形がわからなくなったりしたらこれを使えばいい。

#通常の場合
>> "program".singularize
=> "program"
>> "programs".singularize
=> "program"
>> "program".pluralize
=> "programs"

#特殊な場合
>> "person".pluralize
=> "people"
>> "people".singularize
=> "person"

#単複同形
>> "sheep".pluralize
=> "sheep"
>> "sheep".singularize
=> "sheep"

こんな感じ。


でもたまにうまくいかない。

>> "campus".pluralize
=> nil
>> "campuses".singlarize
=> "campuse"

本当はcampusの複数形はcampuses。


こういう場合は以下のようにInflectorモジュールのルールを追加すればいい。

※Inflectorモジュールは、ActiveRecordによるクラス名とテーブル名の操作を円滑化するために、英単語の単純な変換を行う。
 Inflectorの中心には、inflections.rbに含まれている複数化ルールがある。
 デフォルトのルールは広範囲にわたるが、ルールを追加するのは簡単。
 フレームワークをロードした跡に、coonfig/initializers/inflections.rbまたは同様のコンフィグレーションファイルに追加すればよい。

例えば、config/environment.rbで、

Inflector.inflections do |inflect|
  inflect.irregular "campus","campuses"
end

これでちゃんと変換される。

>> "campus".pluralize
=> "campuses"
>> "campuses".singularize
=> "campus"

また、不可算名詞の場合は以下のように追加する。

Inflector.inflections do |inflect|
  inflect.uncountable("air", "information", "water")
end
>> "air".pluralize
=> "air"
>> "air".singularize
=> "air"

参考

RailsによるアジャイルWebアプリケーション開発 第2版

RailsによるアジャイルWebアプリケーション開発 第2版



お読み頂きありがとうございます。
少しでもお役に立てたらクリックお願いします↓。
にほんブログ村 IT技術ブログ プログラム・プログラマへ人気ブログランキングへ Subscribe with livedoor Reader 


◆◆このブログのサイトマップへ◆◆