管理画面 - lanchester/rails_environment GitHub Wiki

管理画面を手早く作成できるgemとしては

の二つがあります。

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

下記に色々カスタマイズ方法が記してあります。

ex. Comments(管理者コメント)のリンクを非表示にする

# config/inisializers/active_admin.rb

ActiveAdmin.setup do |config|
  config.comments = false
end

enumerizeなラジオボタンを使う場合

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でコールバックを受け取る

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"と記述することでneweditアクションの時のフォームにテンプレートを使うことができます。ビューは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_forformtasticというgemのメソッドです。これには元からenumerize用のラジオボタンを作るメソッドも定義されています。

neweditでフォームを分けたい場合は以下のように場合分けすることで更にテンプレートを分けることができます。

<% if @user.persisted? %>
  <%= render partial: "edit" %>
<% else %>
  <%= render partial: "new" %>
<% end %>

js、cssの読み込み

ActiveAdminの画面ではapplication.jsapplication.cssの内容は読み込まれません。 代わりにactive_admin.js.coffeeactive_admin.css.scssの内容が読まれます。よって、jscssを新しく読み込ませる場合はこちらに記述します。特に上記のように独自のビューを使っている場合は注意が必要です。

エラーメッセージ

バリデーションに引っかかったエラーメッセージは以下のオブジェクトに入っています。

@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 )
⚠️ **GitHub.com Fallback** ⚠️