How to do queries for 'nested :partial' structures?


#1

Hi there,

what’s the most resource friendly way to program the following?

In the VIEW, I need to show a ‘nested :has_many’ structure like this:

=============
Author1
BookA

ChapterX

Page-i

BookB

ChapterX

Page-i

Author2

I assume this means that:

  • Author, Book, Chapter, Page must be “collections” (@authors, @books,
    @chapters, @pages)
  • I need to have a :partial for each collection
  • Each :partial contains the next :partial (nested parent-child
    structure)

My question:

  • Doing (for example)Â the query for @books directly within the ‘author’
    :partial (and so on) would be stupid, wouldn’t it…
  • So how do I need to write the database queries in the controller (in
    the most efficient way) for such a case?
  • How would this look like in the view (how to access the values)? (for
    example in any child :partial)

Thank you very much for your help!
Tom


#2

On Mar 11, 2009, at 8:05 PM, Tom Ha wrote:


Author2
My question:

  • Doing (for example) the query for @books directly within the
    ‘author’
    :partial (and so on) would be stupid, wouldn’t it…
  • So how do I need to write the database queries in the controller (in
    the most efficient way) for such a case?

@authors = Author.find(:all, :include => { :books => { :chapters
=> :pages }})

Of course, that’s going to instantiate all the authors, books,
chapters, and pages into objects in your program…

  • How would this look like in the view (how to access the values)?
    (for
    example in any child :partial)

Thank you very much for your help!
Tom

In your main view,

<%= render :partial => ‘author’, :collection => @authors %>

In the _author.html.erb

<%= render :partial => ‘book’, :collection => author.books %>

etc.

-Rob

Rob B. http://agileconsultingllc.com
removed_email_address@domain.invalid


#3

Really cool! Thanks a lot, Rob!