I have 3 models GrandPa, Pa, Kid GrandPa => has_many :pas Pa => has_many kids When I list GrandPa I would like to present the following ********************************************* 1 - GrandPa_Name 2 - List of Pas sorted by the number kids each pa has in descending order ********************************************** How do I accomplish #2? Thanks -- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Kid has one pa and has one grandpa through pa Pa has one to many kids and has one grandpa Grandpa has one to many kids and has one pa <%= :name[gp] ?pa = kid if from gp? I think you should just have one model with a foreign key to parent and quantity of child including nil. On Mon, Jul 19, 2010 at 7:22 PM, badnaam <asitkmishra-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> I have 3 models GrandPa, Pa, Kid > > GrandPa => has_many :pas > Pa => has_many kids > > When I list GrandPa I would like to present the following > > ********************************************* > 1 - GrandPa_Name > > 2 - List of Pas sorted by the number kids each pa has in descending > order > ********************************************** > > How do I accomplish #2? > > Thanks > > -- > 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > To unsubscribe from this group, send email to > rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org<rubyonrails-talk%2Bunsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org> > . > For more options, visit this group at > http://groups.google.com/group/rubyonrails-talk?hl=en. > >-- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Thanks.> Grandpa has one to many kids and has one paNo, Grandpa has_many pas I didnt quite get how you proposed listing the pas (and kid count for each pa) that belong to a certain grandpa On Jul 19, 7:42 pm, Angel Robert Marquez <angel.marq...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> Kid has one pa and has one grandpa through pa > Pa has one to many kids and has one grandpa > Grandpa has one to many kids and has one pa > > <%= :name[gp] > > ?pa = kid if from gp? > > I think you should just have one model with a foreign key to parent and > quantity of child including nil. > > On Mon, Jul 19, 2010 at 7:22 PM, badnaam <asitkmis...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > > I have 3 models GrandPa, Pa, Kid > > > GrandPa => has_many :pas > > Pa => has_many kids > > > When I list GrandPa I would like to present the following > > > ********************************************* > > 1 - GrandPa_Name > > > 2 - List of Pas sorted by the number kids each pa has in descending > > order > > ********************************************** > > > How do I accomplish #2? > > > Thanks > > > -- > > 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > > To unsubscribe from this group, send email to > > rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org<rubyonrails-talk%2Bunsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org> > > . > > For more options, visit this group at > >http://groups.google.com/group/rubyonrails-talk?hl=en. > >-- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
> > Thanks. > > Grandpa has one to many kids and has one pa > No, Grandpa has_many pas >How is this possible? That''s like saying I have two left arms.> > I didnt quite get how you proposed listing the pas (and kid count for > each pa) that belong to a certain grandpa >Because the sort is to easy to explain. What you''re sorting and why is the problem. So, now that I have two left arms how do I sort them by thumb length on my right arm. Well, I guess get a mirror.> > On Jul 19, 7:42 pm, Angel Robert Marquez <angel.marq...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> > wrote: > > Kid has one pa and has one grandpa through pa > > Pa has one to many kids and has one grandpa > > Grandpa has one to many kids and has one pa > > > > <%= :name[gp] > > > > ?pa = kid if from gp? > > > > I think you should just have one model with a foreign key to parent and > > quantity of child including nil. > > > > On Mon, Jul 19, 2010 at 7:22 PM, badnaam <asitkmis...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > > > I have 3 models GrandPa, Pa, Kid > > > > > GrandPa => has_many :pas > > > Pa => has_many kids > > > > > When I list GrandPa I would like to present the following > > > > > ********************************************* > > > 1 - GrandPa_Name > > > > > 2 - List of Pas sorted by the number kids each pa has in descending > > > order > > > ********************************************** > > > > > How do I accomplish #2? > > > > > Thanks > > > > > -- > > > 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<rubyonrails-talk%2Bunsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org> > <rubyonrails-talk%2Bunsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org<rubyonrails-talk%252Bunsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org> > > > > > . > > > For more options, visit this group at > > >http://groups.google.com/group/rubyonrails-talk?hl=en. > > > > > > -- > 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > To unsubscribe from this group, send email to > rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org<rubyonrails-talk%2Bunsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org> > . > For more options, visit this group at > http://groups.google.com/group/rubyonrails-talk?hl=en. > >-- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Here is the answer if someone else runs into this.. GrandPa.all do |gpa| p gpa.name gpa.pas.all(:joins => :kids, :select => "pas.*, count(pas.id) AS kid_count" :group => :id, :order => "kid_count DESC").each do |pa| p "#{pa.name} : #{pa.kid_count}" end end On Jul 19, 7:58 pm, Angel Robert Marquez <angel.marq...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> > Thanks. > > > Grandpa has one to many kids and has one pa > > No, Grandpa has_many pas > > How is this possible? That''s like saying I have two left arms. > > > > > I didnt quite get how you proposed listing the pas (and kid count for > > each pa) that belong to a certain grandpa > > Because the sort is to easy to explain. What you''re sorting and why is the > problem. So, now that I have two left arms how do I sort them by thumb > length on my right arm. Well, I guess get a mirror. > > > > > On Jul 19, 7:42 pm, Angel Robert Marquez <angel.marq...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> > > wrote: > > > Kid has one pa and has one grandpa through pa > > > Pa has one to many kids and has one grandpa > > > Grandpa has one to many kids and has one pa > > > > <%= :name[gp] > > > > ?pa = kid if from gp? > > > > I think you should just have one model with a foreign key to parent and > > > quantity of child including nil. > > > > On Mon, Jul 19, 2010 at 7:22 PM, badnaam <asitkmis...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > > > > I have 3 models GrandPa, Pa, Kid > > > > > GrandPa => has_many :pas > > > > Pa => has_many kids > > > > > When I list GrandPa I would like to present the following > > > > > ********************************************* > > > > 1 - GrandPa_Name > > > > > 2 - List of Pas sorted by the number kids each pa has in descending > > > > order > > > > ********************************************** > > > > > How do I accomplish #2? > > > > > Thanks > > > > > -- > > > > 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@googlegroups.com > > . > > > > To unsubscribe from this group, send email to > > > > rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org<rubyonrails-talk%2Bunsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org> > > <rubyonrails-talk%2Bunsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org<rubyonrails-talk%252Bunsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org> > > > > > . > > > > For more options, visit this group at > > > >http://groups.google.com/group/rubyonrails-talk?hl=en. > > > -- > > 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > > To unsubscribe from this group, send email to > > rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org<rubyonrails-talk%2Bunsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org> > > . > > For more options, visit this group at > >http://groups.google.com/group/rubyonrails-talk?hl=en. > >-- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
On 20 July 2010 03:22, badnaam <asitkmishra-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> I have 3 models GrandPa, Pa, Kid > > GrandPa => has_many :pas > Pa => has_many kids > > When I list GrandPa I would like to present the following > > ********************************************* > 1 - GrandPa_Name > > 2 - List of Pas sorted by the number kids each pa has in descending > order > ********************************************** > > How do I accomplish #2?A crude way (untested), I am sure there are better as I suspect this will call count zillions of times. It should get you going and you can refactor when you want to. grandpa.pas will give you an array of pas, then simply sort this array by the number of kids. sorted = grandpa.pas.sort_by { |p| p.kids.count } Colin -- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
On 20 July 2010 04:14, badnaam <asitkmishra-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> Here is *AN* answer if someone else runs into this..Your solution may certainly work... but is a bit "imperative" in coding terms, and does introduce an n+1 problem. Rails offers a feature called "counter_cache" on associations - which gives you a column in associate keeping track of the amount of "belonging" records. Have a look for it in the manual here: http://rails.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html If you use it, you can then just do a normal find without the block and order by the counter-cache column, which avoids all the extra SQL counts. -- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.