0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Rails】namespaceを使用してアプリケーションの作成

Posted at

はじめに

初投稿になります。
最初は、自分の学習の復習をしながらアプリケーションの作成をしていく予定です。
2024年2月からプログラミン学習を始めたばかりなので間違ったことを記載している可能性もあります。間違っている部分やアドバイスがありましたらご指摘していただけたら幸いです。

前提

ruby
rails

上記の環境で作成します。

また、今回は管理者側と顧客側があるアプリケーションを作成します。

実装

アプリケーションの作成

まず最初にアプリケーションを作成します。

rails new review_app

namespace の使用

今回は管理者側と顧客側が存在するのでコントローラーを名前空間でグループ化します。
要すると

  • 同じデータを扱うコントローラーとビューを管理者側と顧客側で2つ作成し、それらをそれぞれのフォルダーに分けて管理する
  • 管理者側と顧客側でルーティングをグループ分ける
    ということです。

実装

rails g controller admin/posts

rails g controller public/posts

rails g controller public/homes top

実行後

ディレクトリ ルーティング
スクリーンショット (389).png スクリーンショット (390).png

route.rbの編集

Rails.application.routes.draw do
  root to: 'public/homes#top' #追加
  
  namespace :public do
    resources :posts #追加
    get 'homes/top' #削除
  end

#ここから追加
  namespace :admin do
    resources :posts
  end
#ここまで追加

  get "up" => "rails/health#show", as: :rails_health_check #削除

end

ルーティングの確認

rails routes

下記添付の画像のようにadmin側とpublic側でURLが分かれています。

スクリーンショット (391).png

また今回はpublic側のURLを
/public/posts/new
ではなく
/posts/new
のようにする予定なので、さらにルーティングを編集します。

  namespace :public, path: '' do #編集
    resources :posts
    get 'homes/top'
  end

そうすると以下のようになります。

スクリーンショット (392).png

なぜそうなるのか

path: '' を指定すると、Railsは path オプションを確認し、その値をURLパスに反映させます。path: '' は空のパスを指定することを意味するため、URLには public が含まれません。この結果、生成されるURLは次のようになります。

GET /posts
GET /posts/:id
POST /posts
PATCH/PUT /posts/:id
DELETE /posts/:id

重要な点として、この設定によりURLからは public が除外されますが、コントローラの名前空間は Public が維持されます。つまり、Public::PostsController が使われます。

最後に

これで管理者側と顧客側を分けることができました。
次からログイン機能などを実装していきたいと思います。
ありがとうございました。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?