管理画面 - lanchester/rails_environment GitHub Wiki
管理画面を手早く作成できるgem
としては
- Rails Admin
- Active Admin
の二つがあります。
http://activeadmin.info/index.html
https://github.com/activeadmin/activeadmin
管理画面を簡単に作ることができるgem
です。互換性の問題によりRails 4
以上ではGemfile
に以下のように記述します。
gem 'activeadmin', github: 'activeadmin'
bundle install
後下記を実行していろいろファイルを追加します。
rails g active_admin:install
rake db:migrate
後サーバーを再起動してhttp://localhost:3000/admin/
、もしくはhttp://[サーバーIP]:3000/admin/
にアクセスすると以下の画面が表示されます。
初期状態では以下のアカウントでログインできます。
User: [email protected]
Password: password
管理画面を追加する場合はモデルを作成後以下のコマンドを実行するとページが作成されます。
rails generate active_admin:resource Fuga
# app/admin/fuga.rb が作成される
Strong Parameter
を設定すると登録ができるようになります。
# app/admin/Fuga.rb
ActiveAdmin.register Fuga do
permit_params :foo, :bar
end
下記に色々カスタマイズ方法が記してあります。
- https://github.com/activeadmin/activeadmin/tree/master/docs
- https://github.com/activeadmin/activeadmin/wiki
ex. Comments(管理者コメント)
のリンクを非表示にする
# config/inisializers/active_admin.rb
ActiveAdmin.setup do |config|
config.comments = false
end
input_with_enumerize
というメソッドが用意されています。
https://github.com/brainspec/enumerize/blob/master/lib/enumerize/hooks/formtastic.rb
form do |f|
f.input_with_enumerize :sex, as: :radio
end
ActiveAdmin.register Post do
before_update do |post|
# Do something with post
end
end
使用可能なコールバック
before | after save
before | after create
before | after update
before | after destroy
ActiveAdmin
で確認画面のように独自の遷移やビューを作るにはコントローラをオーバーライドします。
# app/admin/user.rb
form partial: "form"
controller do
def new
@user = User.new
super
end
def edit
@user = User.find(params[:user][:id])
super
end
def confirm
@user = User.new(user_params)
render 'admin/users/_form'
end
def user_params
params.require(:user).permit(:id, :name)
end
end
form partial: "form"
と記述することでnew
やedit
アクションの時のフォームにテンプレートを使うことができます。ビューはapp/views/admin/users/_form.html.erb
などに置いておくことができます。
またcontroller do ... end
とすることで普通のコントローラのようにアクションを定義できます。
これで独自のビューやルーティングを使用することができます。
# view/admin/users/_form.html.erb
<%= semantic_form_for @user, { url: 'confirm' } do |f| %>
<%= f.semantic_errors *f.object.errors.keys %>
<%= f.input :name %>
<%= f.input_with_enumerize :sex, as: :radio %>
<%= f.submit '確認画面' %>
<% end %>
semantic_form_for
はformtastic
というgem
のメソッドです。これには元からenumerize
用のラジオボタンを作るメソッドも定義されています。
new
やedit
でフォームを分けたい場合は以下のように場合分けすることで更にテンプレートを分けることができます。
<% if @user.persisted? %>
<%= render partial: "edit" %>
<% else %>
<%= render partial: "new" %>
<% end %>
ActiveAdmin
の画面ではapplication.js
やapplication.css
の内容は読み込まれません。
代わりにactive_admin.js.coffee
、active_admin.css.scss
の内容が読まれます。よって、js
やcss
を新しく読み込ませる場合はこちらに記述します。特に上記のように独自のビューを使っている場合は注意が必要です。
バリデーションに引っかかったエラーメッセージは以下のオブジェクトに入っています。
@model.errors.messages
デフォルトのままrake assets:precompile
しようとするとglobal-reset
がないなどのSASS:SintaxError
が出たりします。
config.assets.precompile
にマニフェストファイルを追記します。(Rails 4.2
からconfig.assets.precompile
を記述する場所がconfig/application.rb
からconfig/initializers/assets.rb
に変わっています。注意してください)
# config/initializers/assets.rb
Rails.application.config.assets.precompile += %w( active_admin.js active_admin.css )