I have a rather complex algorithm that needs to return an ordered result set, the only problem is that the results contain rows for two different tables, thus meaning if I do Images.find_by_sql, the rows that aren’t Images will be encapsulated by an Image object. The solution I have in mind is to create an ImageIntermediate model, which will return the correct object for a row based on the value inside a column. The problem is that ActiveRecord will think the object returned by ImageIntermediate will be a new record. I can override this with instance_variable_set(“@new_record”, false), but that’s pretty hacky.
Does anyone have a better solution to this problem?
The algorithm calculates the popularity of an asset based on the frequency of votes within a certain time frame, much like digg.com. I have a section for Images which shows images uploaded by users. I’m adding the ability for users to post a link to an image rather than upload one. I want the result set to contain both images and image links. I’ll need to UNION my queries and ORDER them, that’s not a problem… JOINs won’t help as I actually want the correct corresponding model instance out of the other end, hence the need for an ImageIntermediate model that will return either an Image or ImageLink object when I call something like get_obj() on it. I’d just rather avoid the hack that get_obj() will have to perform:
Then, in your database, you have one table for the both of them, with a field called 'type'.
AR will automatically fill that field with the kind of object it is, Image or ImageLink.
In this case, you'd have a null column in either case (the blob column [or file name column, or whatever you're using for the image] on one side, and the href column for ImageLink), but it still seems as though it would solve your problem.