Sử dụng gem active admin cho rails
Ngoài rails_admin việc xây dưng admin cho 1 app ruby on rails nhỏ trở nên vô cùng đơn giản khi sử dụng gem active_admin. Ta sẽ chuẩn bị tạo trang admin manage đăng nhập với gem devise và 1 tý phân quyền cho tài khoản # Gemfile gem 'activeadmin' gem 'devise' gem 'cancancan' ...
Ngoài rails_admin việc xây dưng admin cho 1 app ruby on rails nhỏ trở nên vô cùng đơn giản khi sử dụng gem active_admin.
Ta sẽ chuẩn bị tạo trang admin manage đăng nhập với gem devise và 1 tý phân quyền cho tài khoản
# Gemfile gem 'activeadmin' gem 'devise' gem 'cancancan'
rails generate active_admin:install
Migration:
class DeviseCreateAdminUsers < ActiveRecord::Migration[5.1] def change create_table :admin_users do |t| t.string :user_name, null: false, default: "" t.string :email, null: false, default: "" t.string :encrypted_password, null: false, default: "" t.integer :permission, null: false, default: 0 t.datetime :remember_created_at t.timestamps null: false end add_index :admin_users, :user_name, unique: true add_index :admin_users, :email, unique: true end end
Đăng nhập admin với gem devise.
seeds.rb
AdminUser.create!(user_name: 'admin', email: 'admin@example.com', password: '123456', password_confirmation: '123456', permission: 1) if Rails.env.development?
Tạo resource
rails generate active_admin:resource AdminUsers
Tiếp theo sẽ là cấu hình và phân quyền.
config/initializers/active_admin.eb
config.comments = false config.authorization_adapter = ActiveAdmin::CanCanAdapter
app/models/admin_users.rb
class AdminUser < ApplicationRecord devise :database_authenticatable, :rememberable, :validatable, authentication_keys: [:user_name] enum permission: {manager: 0, admin: 1} end
Thêm phân quyền cho tài khoản admin.
app/models/ability.rb
class Ability include CanCan::Ability def initialize admin_user admin_user ||= AdminUser.new if admin_user.admin? can :manage, :all else can :read, :all end end end
config/routes.rb
devise_for :admin_users, ActiveAdmin::Devise.config ActiveAdmin.routes(self)
Bây giờ coi như đã thử được rồi , cơ mà vẫn sửa chút nội dung trang quản lý.
app/admin/dashboard.rb
ActiveAdmin.register_page "Dashboard" do menu priority: 1, label: proc{I18n.t("active_admin.dashboard")} content title: proc{I18n.t("active_admin.dashboard")} do div class: "blank_slate_container", id: "dashboard_default_message" do span class: "blank_slate" do span I18n.t("active_admin.dashboard_welcome.welcome") small I18n.t("active_admin.dashboard_welcome.call_to_action") end end end end
app/admin/admin_users.rb
ActiveAdmin.register AdminUser do permit_params :user_name, :email, :password, :password_confirmation index do selectable_column id_column column :user_name column :email column :created_at actions end filter :user_name filter :email filter :created_at form do |f| f.inputs do f.input :user_name f.input :email f.input :password f.input :password_confirmation end f.actions end end
Thế là xong. đặp nhập và xem kết quả thôi.
Quá nhanh quá nguy hiểm cho một app quản lý đơn tuần kiểu CRUD , Các bạn có thể lên trang https://activeadmin.info để đọc thêm. bạn nào còn thắc mắc về cách dùng khác - việc custom view, controller, helper, hay là thêm ảnh, nested attributes, sử dụng ckeditor ... thì comment để mình viết thêm 1 bài nha. Cảm ơn đã đọc bài. Mình tự đọc document để chạy app rồi viết bài chứ không sao chép, vui lòng không downvote !