Skip to main content
Version: v2.0

Super Admin

This guide describes how to set up a super admin in Rhino.

Dashboard

Rhino uses the ActiveAdmin gem to create an admin dashboard. It is a powerful tool that allows you to create a custom admin dashboard for your application.

By default Rhino comes with a basic dashboard that displays all resources and allows editing based on the configuration.

Configuration

The admin dashboard configuration is in config/initializers/active_admin.rb and can be altered to the project needs.

Extending

When the admin dashboard is generated, it will create a model for each resource. You can override the default behavior by creating a new model in the app/admin folder. For example, if you want to change the default filters for the Blog resource, you can create app/admin/blog.rb:

app/admin/blog.rb
ActiveAdmin.register Blog do
filter :title
filter :published
end

Theming

Rhino includes the arctic_admin theme.

ActiveAdmin Addons

Rhino include the activeadmin_addons gem to add some extra functionality to ActiveAdmin.

Optimizing select filters

ActiveAdmin’s default select filter loads all records from the database which can cause significant performance issues. To avoid this, a lazy typeahead select filter can be created using activeadmin_addons, and the Ransack gem used by ActiveAdmin.

Imagine we have an InvoiceLineItem table, that belongs to a UsersRole, that in turn belongs to a User. If we want a “User“ filter in the InvoiceLineItem Index page, we would do something like this:

app/admin/invoice_line_items.rb
ActiveAdmin.register InvoiceLineItem do
preserve_default_filters!
remove_filter :users_role # remove original filter
filter :users_role_user_id, # this name must contain the relationships path from the model from the index page until the user table, so invoice_line_item -> users_role -> user. the engine will do a join.
label: "User",
as: :search_select_filter,
url: proc { admin_users_path }, # AJAX endpoint
fields: %w[name nickname email], # columns in the looked up table to be compared against
minimum_input_length: 2,
method_model: User, # original table
width: "190px", # necessary for fixing a UI bug
display_name: "full_nickname_and_email", # custom display name that gives you more flexibility to use whatever you want
order_by: "name"
end

Create a json view for the admin_users_path to return a custom attribute that will be shown in the results select box.

app/views/admin/users/index.json.jbuilder
json.array!(@users) do |user|
json.extract! user, :id, :full_nickname_and_email
end

Finish up by implementing the custom display field in the User model:

app/models/user.rb
def full_nickname_and_email
"#{nickname || name} - #{email}"
end
info

jbuilder is no longer included in Rhino by default. You will need to add it to your Gemfile.