ここまで「うん、まあ何となく君の言わんとすることは分かる...気がする。まあ知らんけど。」ぐらいのふわふわなイメージでRailsを学んできました。
なので先輩に教えてもらっているときに「ちなみにこの部分はわかる?説明できる?」と聞かれると、うっ...とそのまま固まることがしばしば。
今日は自戒と復習の意味を込め、まさにそんなふわふわ理解だったresourcesメソッドについて書いていきます。
resourcesメソッドとは?
resourcesメソッドは、Railsの基本となるコントローラの7つのアクションで記載した7つのアクション名に対してのルーティングを自動で生成するメソッドです。
7つのアクション、なんかドラゴン○ールっぽいですね。全然関係ないけど、プログラミングを学び始めてからは”DB”を"ドラ○ンボール"ではなく、ちゃんとデータベースって脳内で変換できるようになりました。これほんとどうでもいい情報ですね。
この基本の7つのアクションと、それに対応するHTTPメソッドについて説明して行こうと思います。
ここでは例としてTwitterを挙げて説明していきます。
indexとshow
まず、Twitterの自分のアカウントページを開いたところを想像してみてください。
自分の今までの投稿が一覧になっていますよね。
これがコントローラ/アクションで示されるindexで、要するにトップページです。
次に、どれか一つのツイートをクリックしたと想像してみてください。
選択したツイートだけが表示される詳細ページになります。
これがshowになります。
indexとshowは、「ページを出してちょうだい」というルーティングの指示に従って単純にページそのものを表示する処理を行います。
ページを表示させるためのHTTPメソッドはgetになります。
HTTPメソッドの処理のイメージはこんな感じ。
単純にページを表示するだけなので、コントローラがアクションを起こしてくれます。
newとcreate##
次に、アカウントにログインしてツイートを新規作成する、これはnewアクションになります。
新規作成ボタンを押しただけでは、入力するための記事作成画面を単純に表示するだけですよね。
なのでHTTPメソッドはgetになります。
では作成した記事を投稿するときは?
投稿ボタンを押すと、作成画面で入力した内容をデータベースに渡す処理が発生します。
入力した情報をデータベースに渡すメソッドはpostになります。
データベースと情報をやりとりするときは、こんな感じ。
モデルがコントローラにデータベースから情報を渡しています。
editとupdate##
さらに「ツイートを編集したいな〜」と考えたときは編集を行いますね。これがeditアクション。
こちらもnewアクション同様、ページを表示させるだけなのでHTTPメソッドはgetになります。
「ん?じゃあ次のアクションはcreateで良くない?」と一瞬考えてしまいますが、今回は既にある情報を書き換えて、その修正内容をデータベースに送るという処理が発生します。
なのでHTTPメソッドはpatchと呼ばれるものになります。
destroy##
最後に「深夜に酔っ払ったノリで変なツイートあげてるやん...消そう...」と思ったとき。
迷わず削除を行いますよね。これがdestroyです。
HTTPメソッドは名前そのままdeleteになります。
こんなふうに分解して考えられるようになると、たとえばエラーが出たときに「あ、updateアクションなのにメソッドget入っちゃってるわ」みたいな感じで対応できますし、そもそもメソッドを間違えることがなくなるとのこと。
果たしてそんなふうに理解できる日が来るのか、、もその修行はまだまだ続く。