Hi, 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? Cheers Ian --~--~---------~--~----~------------~-------~--~----~ 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
How complex is the query? select images.* from images...join...join...join will get only images column information. On 2/21/07, Ian Leitch <port001-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> > Hi, > > 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? > > Cheers > Ian > > > >--~--~---------~--~----~------------~-------~--~----~ 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
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: def get_obj self.is_link? ? obj = ImageLink.new self.attributes : Image.new self.attributes obj.instance_variable_set("@new_record", false) # hack obj end On 21/02/07, bandito <banditaras-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> > How complex is the query? > select images.* from images...join...join...join will get only images > column information. > > On 2/21/07, Ian Leitch < port001-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > > > > Hi, > > > > 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? > > > > Cheers > > Ian > > > > > > > > > >--~--~---------~--~----~------------~-------~--~----~ 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
On Wed, 21 Feb 2007 12:36:53 +0000 "Ian Leitch" <port001-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> Hi, > > 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? > > Cheers > Ian >You should be able to use STI here... take a look at http://wiki.rubyonrails.org/rails/pages/SingleTableInheritance What this would do is let you do class ImageReference < ActiveRecord::Base end class Image < ImageReference end class ImageLink < ImageReference end 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. -- Luke Ivers <technodolt-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> --~--~---------~--~----~------------~-------~--~----~ 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---