David Eisinger


Elsewhere > Rails Admin Interface Generators

Posted 2011-05-31 on viget.com

Here at Viget, we’re always looking for ways to reduce duplicated effort, and one component that nearly every single one of our applications needs is an admin interface. As such, we’ve spent a lot of time trying to find the perfect drop-in admin interface generator. We’ve been happy with Typus for the past year or two and have been able to contribute back to the project on a number of occasions. Lately, though, a pair of new libraries have been making some noise: ActiveAdmin and RailsAdmin. How do they stack up to Typus? Read on, friend.

Typus

Typus is a library by Francesc Esplugas originally started in 2007. Typus takes a different approach than the other two libraries in that it uses generated controllers that live in your Rails app to serve up its pages, rather than keeping all of its application code within the library. This approach offers (in this author’s opinion) increased extensibility at the expense of code duplication — it’s dirt simple to override the (e.g.) create action in your Admin::CommentsController when the need arises, but you’ll still need a separate controller for every model where the default behavior is good enough.

Installing Typus is very straightforward: add the gem to your Gemfile, bundle it, run rails generate typus to get a basic admin interface up, then run rails generate typus:migration to get user authentication. The authors of the plugin recently fixed one of my biggest gripes, adding generators to make adding new admin controllers a snap. Configuration is all handled by a few YAML files. In terms of looks, Typus isn’t going to win any awards out of the box, but they’ve made it very simple to copy the views into your app’s views/ folder, where you’re free to override them.

ActiveAdmin

I just heard about ActiveAdmin from Peter Cooper’s Ruby Weekly newsletter, though the project was started in April 2010. Before anything else, you have to admit that the project homepage looks pretty nice, and I’m happy to report that that same attention to aesthetics carries into the project itself. Configuration files for each model in the admin interface are written in Ruby and live in app/admin. It’s clear that a lot of thought has gone into the configuration API, and the Github page contains thorough documentation for how to use it.

I’ve long been jealous of Django’s generated admin interfaces, and ActiveAdmin is the first Rails project I’ve seen that can rival it in terms of overall slickness, both from a UI and development standpoint. The trouble with libraries that give you so much out of the box is that it’s often difficult to do things that the author’s didn’t anticipate, and I’d need to spend more than an hour with ActiveAdmin in order to determine if that’s the case here.

RailsAdmin

RailsAdmin is another recent entry into the admin interface generator space, beginning as a Ruby Summer of Code project in August of last year. I had some difficulty getting it installed, finally having success after pointing the Gemfile entry at the GitHub repository (gem 'rails_admin', :git => 'git://github.com/sferik/rails_admin.git'). The signup process was similarly unpolished, outsourcing entirely to Devise to the point that anyone can navigate to /users/sign_up in your application and become an admin.

Once inside the admin interface, things seem to work pretty well. There’s some interesting functionality available for associating models, and the dashboard has some neat animated graphs. I’ll be curious to watch this project as it develops — if they can smooth off some of the rough edges, I think they’ll really have something.

Conclusion

ActiveAdmin offers an incredibly slick out-of-the-box experience; Typus seems to offer more ways to override default behavior. If I was starting a new project today, it would depend on how much customization I thought I’d have to do through the life of the project as to which library I would choose. I put a small project called rails_admin_interfaces on GitHub with branches for each of these libraries so you can try them out and draw your own conclusions.