LoginSignup
0
0

勉強記録ウェブアプリ作成の軌跡 3:ルーティングinサーバーサイド

Posted at

概要

「【Rails×React】UberEats風アプリを作りながら、SPA開発を学ぼう」を使って学んでいく上で自分で勉強記録アプリを作りたいと思ったので、完成するかは置いといて、とりあえず学んだことを自分が作りたいものに置き換えて考えていく。

内容

サーバーサイドにおけるルーティングを書いていく。いわゆるwebページのURLを決めていく感じである。
例えば、買い物をするサイト(sample.com)があったとする。そのTOPページのURLがhttps://sample.comだとする。そこから商品一覧ページに遷移した時のURLはhttps://sample.com/goodsのようなURLとなるでしょう。また、そのサイトにおける自分のプロフィールページはhttps://sample.com/myprofile/12334などが考えられる。最後の数字はユーザごとに割り当てられたIDと考えてもらえれば。。。

このように特定のURLいわゆるリソースを取得するための道筋、ルートを書き記していく。

実装

基本的な書き方は以下の通りである。

  • do endのブロックでくくることでrailsのルーティングを定義できる。
config/routes.rb
Rails.application.routes.draw do
  ...
end
  • namespace: hogeと書くことで名前空間を付与できる。
    • これはコントローラを表したものになっており、下記のようなnamespaceを用いるのであればapp/controllers/api/v1/というディレクトリに作成することになる
    • namespaceは複数配置することができる
config/routes.rb
namespace :api do
  namespace :v1 do
    ...
  end
end
  • 特定のリソースを表したい場合は、resourcesを使う
    • resources :hoge:hogeというリソースに対して7つのルーティングが自動で生成される。
    • 7つというのはGETやPOST、DELETEなどのHTTPメソッドと呼ばれるものに対応したルーティングである。
    • 気になる方はこちらを参照
  • 特定のリソースを表したい場合は以下のような書き方でも可能
    • これはつまり「line_foods/replaceというURLに対してPUTリクエストがきたら、line_foods_controller.rbreplaceメソッドを呼ぶ」ということを意味する
    • resources :hogeとの違いは、アプリケーション独自のルーティングとコントローラー、そのアクションに対応させられるという点
    • 原則はresources、resourceで書く、例外的に必要であればput ... to:も許容する形が学習サイト曰く良いらしい
config/routes.rb
put 'line_foods/replace', to: 'line_foods#replace'

上記の書き方を元に書いたconfig/routes.rbが以下の通りである。

config/routes.rb
Rails.application.routes.draw do
  resources :users do
    resources :articles do
      resources :scores
    end
  end
end

ちなみにターミナル上で下記コマンドを叩くことでそのアプリケーションで定義されているルーティングの一覧を見ることができる。
下記画像が現段階のルーティングの一覧である。httpメソッドをちゃんと指定していないため、不要なルーティングが残った状態である。今後コントローラを作成していく際に消していきたいと思う。

スクリーンショット 2023-11-25 23.32.15.png

またルーティングの一覧の中から今後特定のルーティングを探したいときが来ると思われる。
その際は以下のようなgrepコマンド等を駆使することで容易に見つけることができるので、興味ある方はこういうことも学ぶといい。

# 出力されたrouts一覧から、'order'が含まれる一行のみを出力する
$ rails routes | grep order

参考記事

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