Hello Railsians, I'm hoping for some advice on the best way to implement a site that will allow users to add custom properties to certain data models via a web interface. The basic use-case goes like this: admins have the ability to create custom data fields for client records which users can then edit and run reports on. It seems the cleanest way to do this is to implement some solution at the model level, and I wonder if an appropriate solution has already been developed or if the ideas I'll outline below are going in the right direction. My solution to the problem of how to best implement user-configurable data-models is to create three new "acts_as" methods to extend the relevant models. These methods would be something like "acts_as_datafield_definition" and "has_datafields_defined_in" which would be invoked like class Client << AppModel ... has_datafields_defined_in CustomData ... end class CustomData << AppModel ... acts_as_datafield_definition ... end In a very basic implementation the schema of the table associated with the CustomData model would contain a name, a datatype (which in later versions could be broken out into a separate customizable option of its own) and perhaps a position ranking (for display in related add/edit forms). Each CustomData entry would then be made available as a property of the Client object. So if there were CustomData objects with the names "favorite_vacation_spot" and "spouses_birthday", each Client instance would have the properties client.favorite_vacation_spot and client.spouses_birthday as if those were additional columns in the clients table. The data would then be saved in a third table, say "custom_data_datapoints" with hidden associations to the correct client and custom_data records (so the schema would be something like "client_id, custom_data_id, value"). Is there anything like this already out there or any other way of getting this functionality using existing extensions? Is there a better way of accomplishing this goal, say a plugin that might allow the creation and modification of additional data tables for increased efficiency? If not, wish me luck, because this is going to be one of my first rails plugins, and I think it might be a doozy. In advice on how to best implement it? Thanks, Ethan Ps. Sorry if this is a dupe, I keep having posting wierdness with this group!
on 2007-01-16 18:36