Ruby on Rails で Apache という名前のモデルには注意しよう ^^)

お仕事で作った、Ruby on Railsのプロトタイプの中に Apache というモデルがありました。対応するテーブル名は Railsのルールに則り apaches です。

http://rubyonrails.org/images/rails.png

他にも幾つかのモデル(テーブル)がありました。テストデータを 各fixture に書いたのですが、apaches.ymlのみ id の値が変です。
Railsの fixture ではidの値を明示しない場合は、そのデータのラベル名の hash値が id の値になります。通常9桁くらいの数になっています。

ところが、apachesテーブルのid値は2桁の小さな連番です、apachesテーブルと関連を持つ他のテーブルの外部キー(apache_id)の値は9桁の数値です。


なぜだろう!? と気になったのですが、他のテーブルの外部キーの値を apaches.yml のidに指定して仕事を進めていました。しかし、ひょんな事から原因が判りました。

"apache" の複数形は "apaches" ですが、 "apaches"の単数系は "apach" なんですね !!

% script/console 
Loading development environment (Rails 2.3.2)
>> "apache".pluralize
=> "apaches"
>> "apaches".singularize
=> "apach"
>> 

そこで、config/initializers/inflections.rb に

ActiveSupport::Inflector.inflections do |inflect|
  inflect.irregular 'apache', 'apaches'
end

上のように"apache"と "apaches" を登録したところ 。無事に apachesテーブルのidの値が正しい値になりました。

複数・単数の問題がこんな形で出るんですね ^^);