はじめに
めちゃくちゃつまづいた理由が「複数形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などの命名
モデル
単数形(クラスそのものがユニークなため。また、単一の実体・レコードをあらわすため)
ビューのディレクトリ
複数形(ビューファイルが複数入っているから)
コントローラ
通常、複数形(アクションがいっぱいあるため)
ヘルパー
複数形が多い(コントローラに従う)
テーブル(データベース)
複数形(データがたくさんあるから)
終わりに
つまづきは痛かったけど、得るものも大きかった。ここで知れてよかったです。