12
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

大文字略語とActiveRecord

Posted at

Railsのクラスでは、大文字小文字のメリハリを付けて書く必要がありますが、略語は大文字で書くことが推奨されています。

クラス名の設定

モデルを作るために、rails g model CSVDescriptionとすると、いろいろ変換が入って、以下のようなものが生成されます。

  • models/csv_description.rbに、class CsvDescription
  • db/migrate/**_csv_descriptions.rbに、create_table :csv_descriptions

データベースのテーブル名は全て小文字で正当なのですが、CsvDescriptionは見づらいので、CSVDescriptionと書き換えたとします。これでも、Rails内部でのオートロードは正常に機能して、csv_description.rbからクラスを見つけ出してくれます。

なお、config/initializers/inflections.rbへ、以下のように書いておくと、クラスの生成時点でCSVが一語だと判断して、最初からCSVDescriptionクラスを生成してくれます。

config/initializers/inflections.rb
ActiveSupport::Inflector.inflections(:en) do |inflect|
  inflect.acronym 'CSV'
end

リレーションの設定

ところが、has_manybelongs_toといったリレーションをかけようとすると、このままではうまく行かなくなってしまいます。

has_many :csv_descriptionsとすると、このリレーション名からクラス名を定数として起こすのですが、それはCsvDescriptionとなってしまって、正しいCSVDescriptionにつながりません(inflections.rbを書いていても同じです)。クラス名を明示して、has_many :csv_descriptions, class_name: 'CSVDescription'のように書くしかありません。

関連ページ

12
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?