ActiveSupport::Inflectorで定義した頭字語が`has_many`を解釈してくれない時の解決法
Rubyの命名規則としてクラス名は通常はCamelCase
で記述しますが、HTTP
などの頭字語(Acronym)はそのまますべて大文字で記述します。
Railsで頭字語のクラス名を使うときはモデル等を生成する前に設定で以下の記述を行っておくと自動的に認識してくれます。
config/initializers/inflections.rb
ActiveSupport::Inflector.inflections(:en) do |inflect|
inflect.acronym 'GNU'
end
ただhas_many
でこのクラスを持とうとすると以下のエラーになってしまいます。
LoadError: Unable to autoload constant Gnu, expected
/Users/ironsand/dev/myproject/app/models/gnu.rb to define it
対策
クラス名を明示的に指定するとOKです。
has_many :gnus, class_name => "GNU"