I've upgraded from rails 4.2.6 to rails 5.1, and then started to use webpack.
All set up for using webpack have done, but I can't figure out how to load javascript files on the ActiveAdmin page.
ActiveAdmin loads app/assets/javascripts/active_admin.js.coffee
by default.
Is there a way to load javascript files which is bundled by webpack on the ActiveAdmin page?
I've upgraded from rails 4.2.6 to rails 5.1, and then started to use webpack.
All set up for using webpack have done, but I can't figure out how to load javascript files on the ActiveAdmin page.
ActiveAdmin loads app/assets/javascripts/active_admin.js.coffee
by default.
Is there a way to load javascript files which is bundled by webpack on the ActiveAdmin page?
4 Answers
Reset to default 13I'm a bit late, but I believe it's better to wrap the method rather than to completely override the class. Also, monkey patching Header
will result in tags being rendered in div with id="header"
. In order to render them in <head />
I did the following:
ActiveAdmin::Views::Pages::Base.class_eval do
alias_method :original_build_active_admin_head, :build_active_admin_head
def build_active_admin_head(*args, &block)
original_build_active_admin_head(*args, &block)
within @head do render '/custom_headers' end
end
end
Put this file to config/initializers
(so that it won't be reloaded every time in development mode resulting in infinite loop) folder and create a app/views/_custom_headers.html.erb
file with whatever you need.
Webpack is not yet officially supported. The approach we are using for now is to monkey patch ActiveAdmin::Views::Header to include tags to load the generated output of Webpack, eg.
class ActiveAdmin::Views::Header < Component
def build(namespace, menu)
...
render "application/custom_header_tags"
end
end
In our case our custom_header_tags.erb uses React On Rails but substitute whatever integration you prefer.
For new apps starting with Rails 6.0, Webpacker has become the default asset generator. You can opt-in to using Webpacker for ActiveAdmin assets as well by updating your configuration to turn on the use_webpacker option, either at installation time or manually.
at active_admin installation:
rails g active_admin:install --use_webpacker
manually add to config/initializers/active_admin.rb
ActiveAdmin.setup do |config|
config.use_webpacker = true
end
And run the generator to get default Active Admin assets:
rails g active_admin:webpacker
The method signature for #build_active_admin_head
continues to evolve. It no longer takes arguments as of ActiveAdmin v1.3.1.
Also, in addition to the method-aliasing and component-overriding methods described in other answers, there is one additional method for monkey-patching ActiveAdmin: module#prepend
.
Here's how I override the ActiveAdmin body layout (to throw a big "staging" banner across the page in my staging environment) and head layout (to add calls to webpacker's javascript_pack_tag
):
module AdminPageLayoutOverride
def build_page(*args)
within @body do
render "layouts/global/environment_banner"
end
super
end
def build_active_admin_head
super
within @head do
render "admin/custom_script_tags"
end
end
end
ActiveAdmin::Views::Pages::Base.send :prepend, AdminPageLayoutOverride