Thanks Jeremy. I really tried to use eager loading <https://sequel.jeremyevans.net/rdoc/files/doc/advanced_associations_rdoc.html> but couldn't get my head around it! Are there any more detailed tutorials anywhere that you might know about?
Maybe you should write a book! - Abhijit. On Thu, Sep 10, 2020 at 10:32 AM Jeremy Evans <[email protected]> wrote: > On Wednesday, September 9, 2020 at 6:03:53 PM UTC-7, abhijit wrote: >> >> Hi, >> >> I have a table with associations to itself in a parent child hierarchy >> using parent_id as the foreign key. I can use both the *tree* and the >> *rcte_tree* Sequel plugins there. >> >> I need to get all the children in a nested format, so I've written a >> method like this - >> >> class User < Sequel::Model(:users) >> plugin :rcte_tree >> >> def get_all_children >> below = [] >> >> if self.children.count.zero? >> below = nil >> else >> self.children.each do |child| >> ret = child.get_all_children >> below.push ret >> end >> end >> >> self.values.merge({children: below}) >> end >> end >> >> And I'm able to get the response as expected - >> >> --- >> :id: 1 >> :name: AAA >> :parent_id: nil >> :children: >> - :id: 2 >> :name: AA1 >> :parent_id: 1 >> :children: >> - :id: 3 >> :name: AA2 >> :parent_id: 2 >> :children: nil >> >> >> I was wondering if there is a better way to do this. >> > > If you use the rcte_tree plugin, it should be able to retrieve all > descendants in a single database query. Here's a more compact version: > > class User < Sequel::Model(:users) > plugin :rcte_tree > > def get_all_children > descendants unless children > values.merge(children: (children.map(&:get_all_children) unless > children.empty?)) > end > end > > Thanks, > Jeremy > > -- > You received this message because you are subscribed to the Google Groups > "sequel-talk" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/sequel-talk/3635e483-09bc-438e-b601-554a35d93721o%40googlegroups.com > <https://groups.google.com/d/msgid/sequel-talk/3635e483-09bc-438e-b601-554a35d93721o%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- You received this message because you are subscribed to the Google Groups "sequel-talk" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/sequel-talk/CA%2BgkkgN71%2BSFtmTL0%2BOi0qKyRVuUASCAwoVqo9EO8TvEEThjPA%40mail.gmail.com.
