Building blocks for a CMS
Though there’s been a few attempts at creating high-level, pluggable components in Rails, nothing has really seemed to catch on. There’s Rails engines and some full-blown CMS packages, but there’s still a tendency to built things from the ground up. Why is this?
I’ll list a few low-level tools that you can integrate into any project, that don’t mess with Rails internals and are dead-easy to set up and use.
-
acts_as_tree or acts_as_nested_set
Built into Rails, these will give you a tree model for any model objects. Sprinkle on LiveTree for a Javascript-based UI.
-
acts_as_versioned
Store previous copies of Pages, Assets or any danged model that you please.
-
acts_as_versioned_association
Building on top of acts_as_versioned, this provides versioning support for your associations, so if you had a
Page
that had associatedImageAssets
you could retrieve an exact copy of your page along with the associated image assets at that point in time. -
Polymorphic associations
Built into Rails 1.1, polymorphic associations allow you to associate a model with any other type of model through a polymorphic join association. This means you could tack a Comment onto any of your model objects, like in the following example:
class Comment true end
Adding comment support to a model is simply a matter of inserting a
has_many
one-liner:class Post :commentable end
-
acts_as_attachment
Provides both file and DB-based upload storage, as well has ImageMagick support for auto-resizing of images. If this isn’t flexible enough there’s the more image-manipulation-based ImageMagick for Rails plugin.
What other building blocks have you used when adding typically CMS-like features to your Rails application?