LoginSignup
0
1

【Rails】namespaceで管理者と利用者ごとにcontrollerとviewをわけて処理を変える。

Last updated at Posted at 2024-02-02

はじめに

タイトルの通り、namespaceを使って管理者(admin)と利用者(user)でコントローラーとビューをわけたいと思います。
利用者に公開する画面と管理者に公開する画面は別々で、管理者だけがアクセスできる処理を作成するなどよくあることだと思います。
なのでこのような記事は調べれば沢山でてきますが、勉強のためアウトプットを兼ねて投稿したいと思います。
説明を省略する箇所が多いかもしれませんので、深く理解したいかたは他の記事をみることをおすすめします。

namespaceとは

namespaceは名前空間とも呼ばれており、簡単に言うとコントローラーやモデル、ビュー、ルーティングなどをグループ化するために使用される仕組み。

namespaceの使い方

商品一覧を表示するurl/itemsがあるとします。

ルーティング

Rails.application.routes.draw do
  resources :items
end

通常だとこのようなルーティングを設定することが多いと思いますが、この状態だと管理者(admin)と利用者(user)が同じコントローラーやviewを使用することになります。
今回、管理者と利用者でコントローラーなどをわけたいのでnamespaceを使ってルーテイングをわけたいと思います。

Rails.application.routes.draw do
  ## 利用者
  namespace :user do
    resources :items
  end

  ## 管理者
  namespace :admin do
    resources :items
  end
end

これでnamespaceによるルーテイングのグループ化が完成です。
urlは以下のような感じになります。
user_items GET /user/items(.:format) user/items#index
admin_items GET /admin/items(.:format) admin/items#index
/itemsの前にそれぞれ admin/user/がつくようになります。
adminとuserだけであればuserもグループ化する必要はないかもしれません。

controllerとviewの作成

namespaceを使用する場合は、コントローラーやビューはurlと同じディレクトリ構成にする必要があります。
adminを例にすると、urlは
admin/items#index
のようになっているので、adminディレクトリの下にitemsコントローラーを作成する必要があります。
そこで以下のようにディレクトリを指定してコントローラーを作成すると、adminディレクトリの下にコントローラーやviewなど作成してくれます。

ターミナル
 $ rails g controller admin/items

同様にuserもコントローラーを作成して、これで管理者(admin)と利用者(user)によってcontrollerとviewをわけて処理を変えることができます。
注意点としてnamespaceを利用するとform_withやlink_toなどを使用する時は、namespaceを考慮する必要があります。説明は省略しますが調べると記事はたくさん出てくると思います。

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

https://zenn.dev/sudoukky/articles/731c87c9da80a5
https://ac-creative-lab.net/rails-divide-admin-and-public-using-namespace-and-module/
https://qiita.com/mmaumtjgj/items/77bef3b8ef0ee9a3cbee
https://qiita.com/haruki25596/items/3dec9ec57e4d34742022

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