Forum: Ruby on Rails How to do queries for 'nested :partial' structures ?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Tom H. (Guest)
on 2009-03-12 02:05
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
Rob B. (Guest)
on 2009-03-12 05:08
(Received via mailing list)
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
Tom H. (Guest)
on 2009-03-12 17:51
Really cool! Thanks a lot, Rob!
This topic is locked and can not be replied to.