はじめに
めちゃくちゃつまづいた理由が「複数形s」にあったので、
戒めと教訓の思いを込めて、「複数形に気を付けようね!」という記事です。
問題
routes.rbにて、resource :login ...と書くべきところを、
resources :login ...と書いてしまい
id必要だわspecは通らないわ、
GPTに聞いても「loginをloginsと書いてください」と解決にならない解決策(私が悪い)。
大変でした。
気を付けるべきところ
resourceとresourcesは別物
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で複数の投稿を扱うとき」
などに適しています。
他にもあるぞ!気をつけろ!
resourceとresourcesにまつわる命名
resourceなら単数形(例:login)
resourcesなら複数形(例:users)
復習:MVCなどの命名
モデル
単数形(クラスそのものがユニークなため。また、単一の実体・レコードをあらわすため)
ビューのディレクトリ
複数形(ビューファイルが複数入っているから)
コントローラ
通常、複数形(アクションがいっぱいあるため)
ヘルパー
複数形が多い(コントローラに従う)
テーブル(データベース)
複数形(データがたくさんあるから)
終わりに
つまづきは痛かったけど、得るものも大きかった。ここで知れてよかったです。