In the olden days we would do this sort of thing with db triggers and a 'journal' table--every UPDATE would result in a record_version field being incremented, and the pre-update version of the rec written out to a separate table. You can also keep all record versions in one table & put up a view that selects out just the most recent, but that can be problematic perf-wise. (IIRC, chunks of SAP do the all-versions-in-one-table thing.)
Agree that an AR plugin should be able to handle the journaling--not sure if there is one that does. I vaguely recall an 'acts as deleteable' or 'acts as archivable' plugin discussed here a while back that seems like similar functionality--not sure if it would get you all the way there. ________________________________ From: [email protected] [mailto:[email protected]] On Behalf Of Patrick Doyle Sent: Monday, December 15, 2008 12:26 PM To: [email protected] Subject: [Rails] Re: Saving a "final" version of a record. On Mon, Dec 15, 2008 at 1:13 AM, Michael Kahle <[email protected]<mailto:[email protected]>> wrote: I'll start by apologizing for the title. I can't think what to call this. I have some Claims that need to be entered, but when they are "closed" it saves the data from other related tables into the Claim (this could get messy), so that if the Customer, Registration, or Dealer information is changed at a later date it will remain the same as when the Claim was closed. Is there a preferred method for doing this? Some kind of plugin or something? I understand I could have a separate table for keeping the "archived" version of the record, but I fear the work to create all new tables and then storing the record as this other new archive type which is nothing more than a duplicate of the Claim. Any thoughts? P.S. - Ask away, I am probably not explaining this perfectly, but I will try to elaborate if you are having trouble understanding my challenge. I wonder if you could implement a "copy-on-write" feature in the Customer, Registration, Dealer, etc... tables. Basically, add a "freeze_record" boolean column to those tables and set that to "true" when you need to finalize one of those records. If you ever want/need to update a frozen record, you could allocate a new one, scan all of the claims to which this record "belongs_to" and point all of those that are not closed to the new record. This strikes me as an ideal candidate for some sort of plugin that mixes into ActiveRecord. Unfortunately, I haven't the foggiest idea how to implement the practical side of this theoretical solution (yet... but I'm learning more every day). --wpd --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---

