箱のプログラミング日記。

えんじにあ奮闘記

Railsの命名規則【単数形・複数形】

f:id:y_hakoiri:20191102121842j:plain

基本原則

コントローラー・・・複数形

モデル・・・単数形、先頭大文字

 

で作成すると言うのはおなじみ。

 

$ rails g controller users

$ rails g model User

 

複数の単語を繋げたい場合

コントローラーの場合はアンダーバーで繋げる

モデルは大文字で繋げる

$ rails g controller user_profiles

$ rails g model UserProfile

 

この場合、モデルファイルはuser_profile.rbが生成され

モデルファイルの中は以下のようになる

class UserProfile < ApplicationRecord
end

ちなみに、$ rails g model user_profile としても同様の結果になるし

なんなら$ rails g model userとしてもきちんとUserモデルが生成されるので

大文字小文字やアンダーバーに関してはそこまで心配しなくても良さそう。

 

名前が統一されていて、単数・複数の別がしっかりされていればうまくいく模様。

 

 

単数形のモデルを生成すると複数形のテーブルが生成される

$ rails g model User → usersテーブル

$ rails g model Category   → categoriesテーブル

単純にsをつけるだけでなくきちんと複数形にしてくれる

 

不可算名詞の場合

$ rails g model Address   → addressesテーブル

 

あれっ・・・?笑

 

どうやら、中には不可算名詞であることを識別できずに

わざわざsやesをつけてくれてしまう場合もある模様。

 

そういった場合はconfig/initializers/inlrections.rbをいじればOK

ActiveSupport::Inflector.inflections(:en) do |inflect|
# inflect.plural /^(ox)$/i, '\1en'
# inflect.singular /^(ox)en/i, '\1'
# inflect.irregular 'person', 'people'
# inflect.uncountable %w( fish sheep )
# end

 デフォルトではこうなっている。

 

inflect.irregular 'person', 'people'

これはpersonが単数形の場合はpersonsではなくpeopleにしてね、という意味

 

inflect.uncountable %w( fish sheep )

これはuncountable = 不可算名詞の指定。

fishやsheepは不可算名詞の代表的なもの。

 

デフォルトではこの二つしか記述されていないので、今回のように

複数形にさせたくない名詞をモデル名に使用する場合はここに記述することで

実現することができる。

 

 

不可算名詞は避けよう

出来るだけ不可算名詞をモデルやコントローラー名に使用するのは避けた方がいいそう。

「誰が見ても分かりやすい名前づけ」はプログラミングにおいて必須だけど、

こういう迷いを発生させてしまうくらいであれば、

本当にその名詞(不可算名詞)を使う必要があるのか?をよく考えた上で使用するべきだそうです。

 

kiyotakakubo.hatenablog.com