2010-10-23 2 views
1

У меня есть следующие две модели:Получение графа вложенных моделей в контроллере

photoalbums 
has_many:photos 

photos 
belongs_to:photoalbums 

Когда я показываю список всех фотоальбомов, я хочу также сказать, сколько фотографий есть в альбоме:

контроллер:

def index 
    @photoalbums = PhotoAlbum.all 
end 

Вид:

<%# Get the number of photos per this album %> 
<% @photos = Photo.find_by_photo_album_id(photoalbum.id) %> 
<li><%= @photos.count %> Photos</li> 

Вышеупомянутое не позволяет мне делать @photos.count или @photos.record на вид.

Есть ли лучший способ сделать это в контроллере? Я думал о возможно include(:photos) в контроллере?

Спасибо !!!

+0

Что вы имеете в виду под "не позволяет"? Если вы перейдете к скрипту/консоли и введите одно и то же, что такое значение @photos? Почему бы вам не использовать photoalbum.photos.count? –

ответ

2

Решение 1) По вашему мнению вы должны написать это ..

<% @photos = Photo.find_all_by_photo_album_id(photoalbum.id) %> 
<li><%= @photos.count %> Photos</li> 

вместо find_by_photo_album_id find_all_by_photo_album_id.

Solution 2)

In controller 

def index 
    @photoalbums = PhotoAlbum.find(:all,:include => :photos) 
end 

In View 

<% @photos = photoalbum.photos %> 
<li><%= @photos.count %> Photos</li> 
+0

Спасибо, но должен ли я делать какой-то тип EAGER, включать информацию о типе в контроллер по соображениям производительности? пытаясь узнать этот материал? – AnApprentice

+1

@ TheApprentice Я отредактировал свой ответ. –

Смежные вопросы