active_adminでカスタムfilter(select box)を設置する
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が表示されるようになります。
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が書けるので便利です。