ActiveAdminをいろいろカスタマイズしてるのでそのメモです。
セルに表示するコンテンツを増やす
セルにはもともとデータが1つしか表示されませんが、+
で増やすことができます。
ActiveAdmin.register Post do ... index do column :id column :content column :lots_of do |c| span('hoge') + span('fuga') end end ...
改行も入れて見やすくしてやるとなお良し。
ActiveAdmin.register Post do ... index do column :id column :content column :lots_of do |c| content = Array.new content.push("hoge") content.push("fuga") raw(content.join('<br>')) end end ...
actionsで表示するアクションを追加する
actionsの場所にカスタムアクションを追加できます。
ActiveAdmin.register Post do ... index do column :id column :content actions defaults: true do |c|¬ link_to('custom link', '/custom') end end ...
複数追加できます。
ActiveAdmin.register Post do ... index do column :id column :content actions defaults: true do |c|¬ link_to('custom link1', '/custom1') + link_to('custom link2', '/custom2') end end ...
参考
カラムの幅を指定する
公式ドキュメントに書かれているmax_width
やmin_width
が効かないので、クラス指定してスタイルシートで指定してやるしかないぽい。クラス指定の方法は以下のとおり。
ActiveAdmin.register Post do ... index do column :id column :content, class: :my_class actions end ...
参考
viewを別ファイルから読み込む
例えば、formのときはerbやslimで書いたviewを読み込みたい場合は以下のようにします。
ActiveAdmin.register Post do ... form partial: 'form' ...
app/view/active_admin/post/_form.html.erb
に以下のように書いていけばOKです。
<%= form_for @post do |f| %> ...
モデルに紐付かないページをつくる
register_page
を使うとモデルに紐付かない自由度の高いページをつくれます。
page_action
でアクションを追加します。
ActiveAdmin.register_page "my_page" do page_action :hoge, method: :get page_action :fuga, method: :post controller do def index end def hoge # ... end def fuga # ... end ...
ログインユーザの表示名を変更する
デフォルトではemailが表示されたりしているので独自のプロパティに変更しましょう。
# config/initializers/active_admin.rb ActiveAdmin.setup do |config| config.display_name_methods = [:original_method, :email, :hogehoge] end
他にも設定できる項目いろいろあるのでlib/active_admin/application.rb
を見ると良いです。
参考
既存のフィルター(before_filterとか)をスキップする
たとえば、application_controllerに書いている共通のbefore_filterは管理画面では不要なことがあります。スキップしましょう。
Stack Overflowの方法(config.skip_before_filter
)がなぜか効きませんでした。以下で対応できます。
# config/initializers/active_admin.rb ActiveAdmin::BaseController.class_eval do skip_before_filter :filter_name, :you, :want_to, :skip end
参考
- ruby on rails - Skip before filter with Active Admin - Stack Overflow
- skip_before_filter to ignore default site devise authentication broken for pages in 0.4.4 and for all resources in 0.5.0 · Issue #1661 · activeadmin/activeadmin
before_filterでインスタンス変数を定義する
例えばindexで共通のインスタンス変数を利用したい場合は以下のようにします。
このときindexブロックでインスタンス変数にアクセスする場合は@は不要です。
# app/admin/hoge.rb ActiveAdmin.register Hoge do ... controller do before_filter :set_name, only: :index def set_name @name = "abc" end end index do column :id column :fuga do |h| name # ここでは@は不要 end actions end ... end