Custom controller actions in ActiveAdmin (Ruby on Rails)

August 7, 2014 · Posted in Development 

ActiveAdmin is a popular Ruby on Rails plugin for creating admin area. It helps developers solve many common problems to view/edit data as administrator. There are several other similar plugins, but I prefer ActiveAdmin because it allows developers to customize almost everything.

This post shows how to to add a custom action to an ActiveAdmin controller.

The scenario:

We want to add a custom action to our ‘products’ resource as follows:

- Custom member action – page ‘import’ which will have a form to do something with a product;

- Custom ‘collection’ action that will do some stuff;

- Custom controller action to process the form;

- Custom controller action to process the ‘collection’ command;

- Links to access new pages

 

The Solution

Register our Product model with ActiveAdmin:



 

After that your can edit products using the power of ActiveAdmin.

We will use member actions to customize ActiveAdmin controller. Member action is a controller action which operates on a single resource.

Create actions to show a view with a form and process the post from form:



 

This generates routes:

- showimport_admin_product_path(product_object) equals to ’/admin/products/:id/showimport’ pointing to the Admin::ProductsController#showimport controller action.

- import_admin_product_path(product_object) equals to ’/admin/products/:id/import’ pointing to the controller action ‘import”.

 

Create a view which will be rendered from ‘showimport’ action (file ‘app/views/admin/products/showimport.html.haml’ ):


 

Add your code to the custom controller action ‘import’ to process the form:



 

 

Custom collection action

A collection action is a controller action which operates on the collection of resources.

Declare collection action:



 

This will generate the route ‘dosmth_admin_products_path’.

Place your code in the controller action:



 

All code is available on Github Gists.

 

 

 

 

Comments

  • Stan Carver II

    Max, thank you for documenting collection and member controller actions in ActiveAdmin.