🍓

Rails name space

2023/05/16に公開

はじめに

チーム開発中の初心者です🔰
やることが多すぎて頭が追いつかず思考停止してました😀

今回作っているECサイトで管理者と会員をグループ分けをするために使う
namespaceについて簡単にまとめました🌱

rails routes

rails routesを実行することで表示される項目の復習!
「Prefix」「Verb」「URI Pattern」「Controller#Action」

項目 意味
Prefix パスが入った変数のようなもの
Verb HTTPメソッドを表します
URI Patternのパスにどのhttpリクエストでアクセスするかを示しています
URI Pattern ルーティングのパスを表します
Controller#Action httpリクエストでパスが送られた際に処理が行われるコントローラとアクションを表します
#左がコントローラ名、右がアクション名を示します。

namespaceとは

決めた名前でルーティングのグループ分けをするための仕組み。

今回チーム開発で作成しているECサイトは、
買い物をする会員とサイトを管理する管理者が存在する。

同じURLでページの機能やデザインが違う場合、if文などで実装してしまうと、会員側・管理者側を1つのコントローラー・ビューに記載することになりコードが複雑になる!

それらを解決するのがnamespace(名前空間)🏋🏻

実装

Controller・Viewを作成する

namespaceを使用する場合は、controller名の前にnamespaceで使用するグループ名を入力する!

adminというグループ名の場合

rails g controller admin/items

基本形

rails g controller [namespaceのグループ名]/[コントローラー名]

route.rbを編集

namespace

「URI Pattern」と「Controller#Action」の2つを同時にカスタマイズしたい場合に使用

routes.eb
namespace :admin do
  resources :items
end

namespaceの他の記述法

URL ファイル構成
scope 指定のパスにしたい 変えたくない
namespace 指定のパスにしたい 指定のパスにしたい
module 変えたくない 指定のパスにしたい

rails routes した時に出てくる、Prefix/URI/Patternの差!

scope

scopeは「URI Pattern」のみカスタマイズしたい場合に使用
コントローラは通常のcontroller

routes.eb
scope :admin do
  resources :items
end

scope module

「Controller#Action」のみカスタマイズしたい場合に使用

特定のコントローラーを特定のディレクトリ(名前空間)内にグループ化したいが、URLにその名前空間を反映させたくない場合に便利!

routes.eb
scope module: :admin do
  resources :items
end

🌱参考にさせていただいた記事

https://railsguides.jp/routing.html
https://qiita.com/ryosuketter/items/9240d8c2561b5989f049
https://qiita.com/mmaumtjgj/items/77bef3b8ef0ee9a3cbee

Discussion