Railsで管理画面生成のgemを使わずに手っ取り早く作るにはnamespaceを適用してadminを切り分けるのがよさそう。
認証にdeviseというgemを使って、ささっと管理画面を作ってみたときのメモです。
実現したい内容
- モデルのCRUDは認証済みの管理者だけが行う
- 管理画面で作成したデータを公開する
- 管理画面生成のgemを使わずにシンプルだがカスタマイズしやすい管理画面を作りたい
実現する方法
- namespaceを使って
http://yourdomain.com/admin/
のようなアクセスを実現 /admin
以下はログイン済みの管理者ユーザのみアクセス化- 認証は
devise
というGemを使用
- 認証は
- Modelはそのまま使う
- Controller、View、Assets、Helperはadmin専用のファイルで管理する
実際につくってみた
Shopモデルを作成していく
管理者だけがShopモデルをCRUDできて、一般ユーザは一覧や詳細をみれるように
1. deviseの導入
詳しくは、Ruby on Rails – deviseを使ってユーザの認証機能をカンタン実装をご参照下さい。
上記サイトでは、Userモデルを作成していうるのですが、今回は管理機能を作るのでAdminモデルを生成する点に注意
$ rails g devise Admin
2. scaffoldを使ってShopモデルを生成
魔法のコマンドscaffold
を使ってShopのCRUD完成です
$ rails g scaffold shop name:string address:string description:text
$ rails db:migrate
3. ルーティングを修正
config/routes.rb
を修正
Rails.application.routes.draw do
devise_for :admins
namespace :admin do
resources :shops
end
・・・
end
4. adminディレクトリを作成
$ mkdir -p app/assets/javascripts/admin
$ mkdir -p app/assets/stylesheets/admin
$ mkdir -p app/assets/images/admin
$ mkdir -p app/controllers/admin
$ mkdir -p app/helpers/admin
$ mkdir -p app/views/admin
$ mkdir -p test/controllers/admin
5. ファイルをコピーして名前やメソッドを変更
$ cp app/controllers/shops_controller.rb app/controllers/admin/
$ cp test/controllers/shops_controller.rb test/controllers/admin/
$ cp app/helpers/shops_helper.rb test/helpers/admin/
$ cp -r app/views/shops app/views/admin/shops
admin
配下のControllerやHelperの名前を変更ShopsController
→Admin::ShopsController
ShopsHelper
→Admin::ShopsHelper
ShopsControllerTest
→Admin::ShopsControllerTest
form_for
やlink_to
などのURLをAdminありにしないといけない
6. deviseでの認証機能を実装
admin配下のcontrollerにbefore_action :authenticate_user!
を追加する