Ruby on Rails で Apache という名前のモデルには注意しよう ^^)
お仕事で作った、Ruby on Railsのプロトタイプの中に Apache というモデルがありました。対応するテーブル名は Railsのルールに則り apaches です。
他にも幾つかのモデル(テーブル)がありました。テストデータを 各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の値が正しい値になりました。
複数・単数の問題がこんな形で出るんですね ^^);