現在のバージョンでは,データの管理にはコンソールから操作するか,データベースを直接いじらなければならない.不適切な投稿があったときに削除できるように,管理画面を用意する.
Administrateのインストール
管理画面を簡単に作ってくれるgemであるAdministrateをインストールする.以下の手順でルーティングの設定まで自動でやってくれる.なお,そのままだとエラーが出るため,設定ファイルに若干の追記を行う.
【手順】
vi Gemfile
(以下を追記)
gem 'administrate'
bundle install
bin/rails g administrate:install
vi config/initializers/assets.rb
(以下を追記)
Rails.application.config.assets.precompile +=
%w( administrate/application.js administrate/application.css )
bin/rails assets:precompile
Administrateのテスト
サーバを起動し,http://localhost:3000/adminにアクセスする.管理画面が出てきたらOK.
アクセスコントロール
このままだと誰でも管理画面にアクセスできてしまうので,下記の修正を行い(とりあえずは)先生だけが管理画面にアクセスできるようにする.
【手順】
vi app/controllers/admin/application_controller.rb
(以下を追記)
module Admin
class ApplicationController <
Administrate::ApplicationController
before_action :authenticate_admin
def authenticate_admin
# TODO Add authentication logic here.
redirect_to '/', alert: 'Not authorized.' \
unless current_user && current_user.role == 'teacher'
end
# Override this value to ...
# on index pages. Defaults to 20.
# def records_per_page
# params[:per_page] || 20
# end
end
end
管理画面のカスタマイズ
このままでは管理画面が見づらいので,ちょっとしたカスタマイズを行い見やすくする.
【手順】
vi app/dashboards/user_dashboard.rb
(以下を修正)
class UserDashboard < Administrate::BaseDashboard
# ATTRIBUTE_TYPES
# a hash that describes the type of each of the model's fields.
#
# Each different type represents an Administrate::Field object,
# which determines how the attribute is displayed
# on pages throughout the dashboard.
ATTRIBUTE_TYPES = {
posts: Field::HasMany,
visits: Field::HasMany,
id: Field::Number,
#email: Field::String,
#encrypted_password: Field::String,
#reset_password_token: Field::String,
#reset_password_sent_at: Field::DateTime,
#remember_created_at: Field::DateTime,
#created_at: Field::DateTime,
#updated_at: Field::DateTime,
username: Field::String,
fullname: Field::String,
password: Field::Password,
role: Field::String,
}.freeze
# COLLECTION_ATTRIBUTES
# ...
# Feel free to add, remove, or rearrange items.
COLLECTION_ATTRIBUTES = %i[
id
username
fullname
posts
].freeze
# SHOW_PAGE_ATTRIBUTES
# an array ....
SHOW_PAGE_ATTRIBUTES = %i[
id
username
fullname
role
].freeze
# FORM_ATTRIBUTES
# an array of attributes that will be displayed
# on the model's form (`new` and `edit`) pages.
FORM_ATTRIBUTES = %i[
username
fullname
password
role
].freeze
ページネーションの表示が崩れているのでそれを修正する.Bootstrap4対応のKaminariではなくdefaultのKaminariファイルを必要とするので,quick hackではあるが一度そのファイルを生成してAdministrate用に置いたあと,再度,Bootstrap4に合わせたページネーション用ファイルを生成するということをやる.
【手順】
bin/rails g administrate:views:index
vi app/views/admin/application/index.html.erb
(以下を追加)
<%= paginate resources, views_prefix: 'admin' %>
bin/rails g kaminari:views default -f
mkdir app/views/admin/kaminari
mv app/views/kaminari/* app/views/admin/kaminari/
bin/rails g kaminari:views bootstrap4
Administrateのテスト(2)
0 件のコメント:
コメントを投稿