active_adminでカスタムfilter(select box)を設置する


[まとめ] 現在開催中のKindleセール情報はこちら

active_adminで管理画面を作る際にデフォルトでfilterを作ってくれますが、select boxを使いたい部分がテキスト入力になっていたりします。

そんな時は、filterのカスタマイズ設定をすれば簡単に切り替えることが可能です。

select boxを使いたい場合、以下のようにasとcollectionを設定します。

# admin
ActiveAdmin.register Data do
  # 論理削除フラグをselect boxとして表示
  filter :is_deleted, :as => :select, :collection => [["削除", 'true'], ["公開", 'false']]
end

こんな感じにselect boxが表示されるようになります。

admin_is_deleted

collection部分には別モデルのオブジェクトを使用することもできます。

# admin
ActiveAdmin.register Data do
  # Packageモデルのversionをselect boxとして表示
  filter :version, :as => :select, :collection => proc{ (Package.all.map { |p| p.version }).uniq.sort }
end

mapやuniqと組み合わせることで手軽にfilterが書けるので便利です。

参考

[まとめ] 現在開催中のKindleセール情報はこちら