Rails ルーティングについて
はじめに
チーム開発でアプリケーション詳細設計書を作る前にいろいろと予習復習中の初心者です🔰
今までやってきたことはなんだったのかってくらい自分の理解ができてないところがたくさん目について凹んでますが、逆に成長できるチャンスやと自分に言い聞かせています🏋🏻
今までURLやHTTPについてあまり意識できていなかったので、
私なりになぜ?と思ったことを書き残しておきます。
HTTPリクエストについて
ブラウザは表示したい(取得したい)ページを表示するために、欲しいページやデータを持っているサーバーに対してお願いするような形でリクエストをする必要がある。
(このお願いがHTTPリクエスト)
HTTPリクエストには以下のようにいくつかの種類があり、それぞれをリクエストメソッドと呼んでおり、省略してメソッドとだけ呼ばれることもある。
HTTP | 用途 |
---|---|
GET | データの取得(ページ自体もデータ) |
POST | 新しいデータの作成 |
PUT | 既存のデータの更新 |
PATCH | 既存のデータの一部更新 |
DELETE | 既存のデータを削除 |
💡じゃあ、newアクションの時はPOSTなのでは?と思ったのですが、その時は実際にデータが生成されるのではなく、ユーザーからデータを入力するためのフォームを提供するため、GETメソッドが使用されるとのこと!💡
簡単にいうと、
newアクションは、
「投稿を新規作成するためのフォーム(書き込むところ)をviewに返すアクション」
createアクションは、
「投稿を新規作成するアクション」
です。
💡補足
例えば、「新規投稿作成」ページに移動した場合、このページはユーザーから投稿タイトル、内容などの情報を入力するためのフォームを提供する。サーバーにはまだ新しい投稿が生成されていないので、「新規投稿」ページを要求するためにGETメソッドが使用される!
その後、フォームに情報を入力し「送信」ボタンをクリックすると、サーバーに新しい投稿を作成するよう要求され、このときはPOSTメソッドが使用される。(このPOSTリクエストにはユーザーがフォームに入力した投稿タイトル、内容などの情報が含まれている)
このようにウェブ開発ではリソースを生成する過程が、'new'アクションと'create'アクションに分かれていて、この二つのアクションはそれぞれGETとPOSTメソッドを使う。
editアクションの時も同じ原理で、'edit'アクションは既存のリソースの編集フォームにアクセスするためのURLを提供し、ユーザーがデータを入力して編集を行うためにGETリクエストを使用する。編集フォームの送信や変更の保存は、通常、更新操作に適したPOSTリクエストやPUT/PATCHリクエストを使用して行われる。
💡なるほど。じゃあnewがあるとこにcreateがないとおかしいし、editがあればupdateもないとおかしい。ちゃんとカリキュラムを理解しきれていれば問題なかったところだと思うが、現役のエンジニアの方もここなんでGETなの?って言ってたので、自分なりに調べて理解できてよかった!💡
🌱フォームヘルパーについて
ちなみに、省略されていない形はこれ!
<%= form_with model: @list, url: '/lists', method: :post do |f| %>
:
urlとmethodオプションを使用することで、どのURLへどのHTTPメソッドで送信するかを厳密に指定することができる!
railsで定義されている7つのアクション
アクション名 | 役割 |
---|---|
index | リソースの一覧を表示する |
new | リソースを新規作成する |
create | リソースを新規作成して追加(保存)する |
edit | リソースを更新するためのフォームを作成する |
show | レコードの内容を表示する |
update | リソースを更新する |
destroy | リソースを削除する |
一般的には7つの基本アクションを用いて設計するが、それだけでは対応できない要件がある場合やコードの可読性や保守性を高めるために、追加のアクションを作成することがある!
が、不必要に多くのカスタムアクションを作成すると、アプリケーションの設計が複雑になるので注意。
追加のアクションを作りたい場合
collectionとmember
7つの基本アクション以外でルーティングを定義する時には、collectionかmemberを利用!
- collectionはルーティングに:idがつかない(リソースの集合全体を対象)
- memberは:idがつく(リソースの集合の中の特定の1つのリソースを対象)
という違いがあります。
collection
resources :users do
collection do
get 'download' #/users/download というURLになります。
end
end
member
resources :users do
member do
get 'activate' #/users/:id/activate というURLになります。
end
end
collectionとmemberを使用することで、RESTfulな設計を維持しつつ、アプリケーションの要件に応じたカスタムアクションを追加することが可能!
お疲れさまでした🌙
Discussion