I have a site nearing structural completion. Essentially, it’s made up of Users and Photos. However, Photos have a LOT of HABTM relationships, most of which are different kinds of tags, and others being categories, collections, etc…
My client would like to be able to have a conditional CMS based off the content being viewed for different promotional purposes or whatnot. For example, if a user is browsing the Category “Leprechauns”, he may want to show html content about St. Patrick’s Day or something. He may even want to easily include the browing user’s name, if available. In which case, it’d be nice to have some sort of templating system. The part that makes this tricky is that these are small blocks of HTML for something like a 300×300 space in the sidebar and is NOT the primary content.
I’ve looked into refinery, but it seems to be too much of a complete solution. I’ve also thought about building in from scratch, but I don’t know where to begin with treating dynamically generated pages (such as a new Category) as a recognizable object in Rails. I’d like to keep it more global than a slew of HABTM relationships, but it’s looking like that might be where I’m heading. Ideally, he’d be able to make some HTML and check off “I’d like this to show on x and y Category page and b and z Collection page and for the tag Foo and for the tag bar as well as on my homepage”
Any suggestions? I’m open to finding a gem or getting a solid start on a homebrew.
UPDATE
I’m thinking of setting up some models Like the following:
cms_contents
============
id:integer
contents:text
timestamps
cms_associations
================
id:integer
cms_content_id:integer
model_id:integer
record_id:integer #optional
secondary_model_id:integer #optional
secondary_record_id:integer #optional
models
======
id:integer
name:string
Where:
cms_contentwould contain the HTML.cms_associationswould be an ActiveRecord model usinghas_many, :throughmodelswould contain a the models the CMS content could be associated with- if
record_idis not given, it associates with the model index - if
record_idis given, it associated with the record of the provided model with that
id - if secondary information is given, a combination is created for other many to many
relationships
eg:
User has_many :photos
Browsing Photos for User(10)
model_id => #User model Id
record_id => 10
secondary_model_id => #Photo model id
So you could customize the content for browsing photos for specific users such as featured users or companies that may pay for advertising.
Any thoughts on this structure?
It’s almost as if the almighty Ryan Bates is looking out for me, but the latest Railscast is on CopyCopter, which does exactly what I’m looking for, and runs as a separate app, so I don’t have to worry about bogging down my main app. I suggest anyone who finds this to watch the screencast, as it seems pretty impressive.
http://railscasts.com/episodes/336-copycopter?autoplay=true