Hi,
I have a design question about the best way to support versions/ revisions (BTW, not sure which term is appropriate for this?) of a somewhat deep hierarchy of models within a CMS type system. For example let's say I wanted to store information about classes and so I had:
course chapter lecture
with has_many relationships (course has_many chapters, chapter has_many lectures), and each level has some amount of meta data with it (Title for most of them, perhaps abstract, etc.). I'd like to allow a person entering information to do things like snapshot a chapter and save off a version/revision, which would be the chapter and the lectures under it, or snapshot just a lecture or snapshot a whole course. Whichever level they snapshot at that should be a version/revision and so you'd only affect it and the items below it when you're editing that version/revision. You'd do things like save a version of the chapter, make profound effects, decide if you like them, possibly go back and use the old version, then use the new version in a new version of the course, etc.
I've poked around a fair amount at various version plugins, but they all seem focused on versioning a single table and doing so in a separate version table (or tables); in this example when you make a 'version' of chapter, you really want to also copy all the lectures, set the foreign keys right, etc. and you (might?) want to leave the versions in their original tables both for editing them (so that you don't have to do hackery to AR to make it use the table courses_versions sometimes) and so that if you have instance records (i.e. user_course) they point to the actual version/revision they took.
I'm looking for feedback on a) any flaws in my original problem and how I understand the general solution (i.e. am I confused), b) any suggestions on plugins solutions that already solve this, and/or c) any common patterns people use to solve this that I should use when/if I need to implement on my own.
Thanks, \Peter