2010-09-24 5 views

Répondre

3

Je suppose que vous avez deux (ou plus) modèles séparés pour les objets enfants, de sorte que votre modèle Parent ressemble à ceci:

class Parent < ActiveRecord::Base 
    has_many :dogs 
    has_many :cats 
end 

Pour les trier et de les obtenir généralement children vous pouvez écrire la méthode (similaire à @gertas réponse):

def children 
    @children ||= (self.dogs.all + self.cats.all).sort(&:created_at) 
end 

et le mettre dans le modèle Parent. Ensuite, vous pouvez l'utiliser dans le contrôleur:

@parent = Parent.find(params[:id]) 
@children = @parent.children 

Maintenant, nous allons essayer de les afficher dans une vue. Je suppose que vous avez créé deux partiels pour chaque modèle _cat.html.erb et _dog.html.erb. En vue:

<h1>Children list:</h1> 
<% @parent.children.each do |child| %> 
    <%= render child %> 
<% end %> 

Il faut trouver automaticaly qui devrait être utilisé partielle, mais il peut être utilisé que si vous suivez Rails façon. Si vous voulez nommer les partiels de manière différente, ou les stocker dans un répertoire différent, alors vous devrez écrire vos propres méthodes qui choisiront une partie correcte en fonction du type d'objet.

+0

Merci! Cela semble me mettre sur la bonne voie. J'apprécie vraiment votre aide. – thedjpetersen

+0

Merci cela semble avoir fait l'affaire – thedjpetersen

1

Vous pouvez ajouter une méthode accesseur sur votre modèle parent:

class Parent < ActiveRecord::Base 
    def sorted_children 
    children.scoped(:order => 'created_at DESC') 
    # or, in rails3: 
    # children.order('created_at DESC') 
    end 
end 

Si l'ordre naturel pour votre modèle d'enfant est le champ de date et que vous souhaitez le faire partout, alors il suffit de définir un champ d'application par défaut sur il:

class Child < ActiveRecord::Base 
    default_scope :order => 'created_at DESC' 
end 
1

Comme les objets enfants sont dans différents types et ils sont récupérés séparément (has_many séparés) que vous devez faire le tri dans Ruby:

sorted_childs=(@resume.child1_sections.all + @resume.child2_sections.all).sort(&:created_at) 

Sinon, vous devez introduire l'héritage de table avec des colonnes communes dans le parent. Ensuite, il serait possible d'avoir un autre has_many pour tous les enfants avec :order.

Questions connexes