2010-03-15 4 views
0

Comment pourrais-je montrer l'un des nombreux objets imbriqués dans la vue d'indexhas_one | attributs imbriqués -

class Album < ActiveRecord::Base 

has_many: photos 
accepts_nested_attributes_for :photos, 
:reject_if => proc { |a| a.all? { |k, v| v.blank?} } 


has_one: cover 
accepts_nested_attributes_for :cover 


end 

class Album Controller < ApplicationController 
    layout "mini" 
    def index 
    @albums = Album.find(:all, 
    :include => [:cover,]).reverse 

    respond_to do |format| 
     format.html # index.html.erb 
     format.xml { render :xml => @albums } 
    end 
    end 

C'est ce que j'ai ainsi le prix. Je veux juste montrer une couverture pour chaque album.

Toute information sur ce serait une aide massive !!

Répondre

2

À votre avis, parcourez les données imbriquées. à savoir

<% @albums.each do |album| %> 

    <%= album.name %> 
    <% # display other album details %> 

    <%= image_tag album.cover.name %> 

    <% album.photos.each do |photo| %> 
    <%= image_tag photo.name %> 
    <% end %> 
<% end %> 

Dans votre contrôleur comprennent le photos dans les résultats de la requête.

@albums = Album.all :include => [:photos] 

Vous n'avez pas besoin d'inclure le :cover dans la requête qu'il est une association has_one (sauf si vous utilisez les champs de :cover dans votre état WHERE).

Je suppose que vous faites l'appel reverse pour trier le jeu de résultats. Utilisez plutôt la clause :order.

@albums = Album.all :include => [:photos], :order => "created_at ASC" 

OU

@albums = Album.all :include => [:photos], :order => "name ASC" 
+0

Cela fonctionne bien lorsque vous avez des contrôleurs différents, mais ne fonctionne pas avec des attributs imbriqués. obtenir une erreur: variable locale non définie ou méthode 'photo 'pour # MrThomas

+0

J'ai mis à jour ma réponse. Regarde. –

Questions connexes