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 -~----------~----~----~----~------~----~------~--~---