1
1

Railsにおける複数形`s`の注意

Posted at

はじめに

めちゃくちゃつまづいた理由が「複数形s」にあったので、
戒めと教訓の思いを込めて、「複数形に気を付けようね!」という記事です。

問題

routes.rbにて、resource :login ...と書くべきところを、
resources :login ...と書いてしまい
id必要だわspecは通らないわ、
GPTに聞いても「loginloginsと書いてください」と解決にならない解決策(私が悪い)。
大変でした。

気を付けるべきところ

resourceresourcesは別物

resources

  • resourcesは、複数のリソースを扱う際に使用されます。一般的には、複数のオブジェクトの集合に対するCRUD(Create, Read, Update, Delete)操作を行う場合に使います。
  • 例えば、resources :usersと記述すると、ユーザーの一覧表示(index)、新規作成(new)、表示(show)、編集(edit)、更新(update)、作成(create)、削除(destroy)に対応する標準的な7つのRESTfulルートが生成されます。
  • これらのルートは、通常IDを含むURL(例:/users/1)を用いて特定のリソースを識別します。

resource

  • resourceは、単一のリソースを扱う際に使用されます。これは、IDによって区別されない単一のオブジェクトに対する操作を行う場合(例えば、ユーザーの現在のプロフィールやダッシュボードなど)に適しています。
  • 例えば、resource :profileと記述すると、新規作成(new)、表示(show)、編集(edit)、更新(update)、作成(create)、削除(destroy)に対応する6つのルートが生成されますが、一覧表示(index)ルートは含まれません。
  • これらのルートは、IDを含まないURL(例:/profile)を用いてアクセスされ、通常はログインしているユーザーの特定のリソースに紐付けられます。

つまり、

  • 扱うオブジェクトが単一か集合か
  • idを使用するかしないか
  • indexが作成されない
  • URLにsがつくかどうか

の違いがあるということです。

ログイン・ログアウトは「1人のユーザーに対する処理」なので、resourceが適していたわけですね。
sがつく方(resources)は、
「usersでユーザーの一覧と個々の詳細を扱ったり、postsで複数の投稿を扱うとき」
などに適しています。

他にもあるぞ!気をつけろ!

resourceresourcesにまつわる命名

resourceなら単数形(例:login
resourcesなら複数形(例:users

復習:MVCなどの命名

モデル

単数形(クラスそのものがユニークなため。また、単一の実体・レコードをあらわすため)

ビューのディレクトリ

複数形(ビューファイルが複数入っているから)

コントローラ

通常、複数形(アクションがいっぱいあるため)

ヘルパー

複数形が多い(コントローラに従う)

テーブル(データベース)

複数形(データがたくさんあるから)

終わりに

つまづきは痛かったけど、得るものも大きかった。ここで知れてよかったです。

1
1
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
1
1