はじめに
初投稿になります。
最初は、自分の学習の復習をしながらアプリケーションの作成をしていく予定です。
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
実行後
ディレクトリ | ルーティング |
---|---|
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が分かれています。
また今回はpublic側のURLを
/public/posts/new
ではなく
/posts/new
のようにする予定なので、さらにルーティングを編集します。
namespace :public, path: '' do #編集
resources :posts
get 'homes/top'
end
そうすると以下のようになります。
なぜそうなるのか
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 が使われます。
最後に
これで管理者側と顧客側を分けることができました。
次からログイン機能などを実装していきたいと思います。
ありがとうございました。