Rails でモデル名などに大文字略語を入れたい場合

投稿者: | 2016/05/03

Rails によるモデル生成時、単語は基本的にキャメルケースで変換されてモデルクラスが生成されます。
例えば下記の様にモデル生成した場合。

bundle exec rails g model CSVRecoed

出来上がるモデル名は”CsvRecord” になります。

しかし、一部の大文字略語をそのまま使用したい場合、キャメルケースに変換されてしまうのは困ります。

その場合、”config/initializers/inflections.rb” に下記の様に登録しておくと、キャメルケース化を回避できます。

ActiveSupport::Inflector.inflections(:en) do |inflect|
  inflect.acronym 'CSV'
end

リレーション時には注意

ただし、この方法の場合has_many やbelongs_to 等のリレーション時にうまく名前解決してくれなくなる様です。
下記の様に明示的にclass_name を指定してやる必要があるとのこと。

# bad
has_maney :csv_record

# good
has_many :csv_record, class_name: 'CSVRecord'

参考


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータがどう処理されているか知りたい方はこちらをお読みください