はじめに
ActiveAdmin のヘッダーメニューのカスタマイズで、ラベルの変更方法について調べてみました。
ヘッダーメニューのラベルの変更方法
ActiveAdmin のドキュメント に書いてありますが、ActiveAdmin の register
ブロックの中で、menu
メソッドの label
オプションに文字列を渡すことで設定できます。
ActiveAdmin.register User do
menu label: 'Something'
end
I18n やモデルのメソッドも指定できる
以下のように、メソッドを渡して
メソッドの戻り値は String とします。
ActiveAdmin.register User do
menu label: ->{ User.something_label }
end
proc で渡さないと、1回レンダリングしたあとメソッドの値を更新してくれないので注意
メソッドを渡すのに、直接渡すことができないかと考える方もいるかと思います。
戻り値が String なら、以下のように指定することは可能です。
ただ、メソッドが実行されるのは最初一度のみで、以降アプリ再起動するまでその値が保持されます。
例えば以下のような設定をしていると、
ActiveAdmin.register User do
menu label: User.something_label
end
class User < ApplicationRecord
def self.something_label
"#{Time.current}"
end
end
ラベルは一度レンダリングした時刻、例えば 2020-03-07 09:12:32 +0900
からリロードなどをしても変わらなくなります。
おわりに
ドキュメントふまえて色々実験すると勉強になりますね。一度レンダリングしたあと値を保持し続ける挙動についてはまた機会があれば調べてみたいと思います。