Forum: Ruby on Rails Newbie question: has_many to multiple classes

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Stephen Gooberman-Hill (Guest)
on 2006-02-08 00:41
(Received via mailing list)
Hi,
I'm trying to work out how to tackle a particular problem in rails.

I have some data. A lot of data (well not NSA style a lot of data, but
a lot for me: 1Gb at the moment, more to come).

I'm building a ruby application to process and view this data, and have
been working round using rails as a front end - do the heavy lifting
using some maths libraries, then use rails to display results, etc.

The problem that I have is as follows: The natural organisation is that
the data consists of DataSets, each DataSet is a group of related time
series (Series), and each series consists fo a set of observations,
each Observation having a set of parameters.

So far, so good. The logical layout of the data is something like

DataSet *has_many* Series
Series *has_many* Observation

The problem is that I need to be able to do processing of the data
offline at a later point, and one of the thngs I am doing is developing
new ways of dealing with the data. So I need to apply a transformation
to each Observation. The transformed data hasn't lost anything, and it
still comes in Series which belong to a dataset.

One option would be

DataSet *has_many* Series
DataSet has many TransformedSeries
Series *has_many* Observation
TransformedSeries has many TransformedObservation

but the problem is that every time I add a new transformation, I need
to change my DB schema, etc, and add new code in to DataSet - which I
personally believe is inelegant!

What I would really like is for the Series to have a field
(series_type) which contains the name of the table to look up the
Observation in. So, depending on the value in the series_type field,
Series would perform *has_many* operations using the Observation table
or
the TransformedObservation table (or whatever other table).

Is there any easy way to achieve this without directly hacking
*has_many* (possibly by yielding out the class name and additional
attributes, so allowing the block to dictate the class / able to pull
the data from)?

Best regards,

Treefrog
This topic is locked and can not be replied to.