アクティブな管理レイアウトをカスタマイズする必要がありますが、どうすればよいですか?
ビューがgemで定義され、Railsアプリで定義されている場合、Railsアプリで定義されているビューが提供されます。これは論理的な優先順位です。
したがって、すべてまたは一部のアクティブな管理ビューをオーバーライドする必要がある場合は、これらをアプリにコピーして、必要に応じて変更する必要があります。
アクティブな管理レイアウトは、実際にはレイアウトファイルとして定義されていませんが、プログラムで生成されます。したがって、カスタムレイアウトをレイアウトディレクトリに配置しても、実際にはデフォルトのレイアウトが上書きされることはありません。
ただし、アプリケーション内でアクティブな管理レイアウトメソッドをモンキーパッチまたはダックパンチすることはできます。
以下は、IE固有のスタイルシートをヘッダーに追加します。
module ActiveAdmin
module Views
module Pages
class Base < Arbre::HTML::Document
alias_method :original_build_active_admin_head, :build_active_admin_head unless method_defined?(:original_build_active_admin_head)
def build_active_admin_head
within @head do
meta :"http-equiv" => "Content-type", :content => "text/html; charset=utf-8"
insert_tag Arbre::HTML::Title, [title, active_admin_application.site_title].join(" | ")
active_admin_application.stylesheets.each do |path|
link :href => stylesheet_path(path), :media => "screen", :rel => "stylesheet", :type => "text/css"
end
active_admin_application.javascripts.each do |path|
script :src => javascript_path(path), :type => "text/javascript"
end
text_node csrf_meta_tag
text_node "<!--[if lt IE 7]>
<link rel=\"stylesheet\" type=\"text/css\" media=\"all\" href=\"admin_ie7.css\ />
<![endif] -->".html_safe
end
end
end
end
end
end
明らかに醜い解決策。
たぶん、ActiveAdminはこれを行うためのより良い方法を今までに提供していますか?知りません。ただし、この状況に対応する少しクリーンなパッチの例を次に示します。私の例では、webpacker gemsjavascript_pack_tagを管理領域に追加します。
module MyApp
module ActiveAdmin
module Views
module Pages
module BaseExtension
def build_active_admin_head
super
within @head do
text_node(javascript_pack_tag('application'))
end
end
end
end
end
end
end
class ActiveAdmin::Views::Pages::Base < Arbre::HTML::Document
prepend MyApp::ActiveAdmin::Views::Pages::BaseExtension
end