LoginSignup
1
1

More than 3 years have passed since last update.

ActiveAdminで、indexのカラムにレコードの状態によってクラスをつける

Last updated at Posted at 2019-11-06

備忘録。

状況

Userというモデルがあったとして、

index do
    column(:name)
    column(:address)
    column(:status)
en

のようなとき、特定のカラムだけ色を変えるなどでクラスをつけたい場合、

column(:status, class: 'red')

とすると思う。

だめな例

この方法では、statusによって色を変えたいなどでクラスをつけたい場合に、

column(:status, class: status)

column(:status, class: user.status)

のように書くことはできない。ここの時点でUserのインスタンスを取得する手段がないため、
NoMethodErrorになってしまう。

では、どうするかというと、

column(:status) do |user|
  current_arbre_element.add_class user.status
  user.status
end

のようにしてあげるとできる

なんでそうなるのか

ActiveAdminのindex配下では、selfがActiveAdmin::Views::IndexAsTableというクラスのインスタンスになっている。

このクラスは、#current_arbre_elementというメソッドを持っていて、この戻り値で

Arbre(ActiveAdminの内で使っている、HTMLのヘルパーgem)か、ActiveAdmin::Views::配下の、HTMLオブジェクトを表しているクラスのインスタンスを返すようになっている。

このクラス達は、add_classなど、自分自身を編集するメソッドを持っているので、そこにクラスに設定したい値を渡してあげるという寸法。

おまけ

パネルとかだったら、以下のissueの下の方の方法でいける。
https://github.com/activeadmin/activeadmin/issues/1615

あとがき

ドキュメントを漁っても見つからず、自分でメソッドを漁る羽目になった。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1