2013-09-24 10 views
1

J'ai deux classes avec une relation 1-n. Comme si:Configurer la relation Mongoid avec les objets de retour triés

class Band 
    include Mongoid::Document 
    has_many :members 
end 

class Member 
    include Mongoid::Document 
    field :name, type: String 
    field :joined, type: Date 
    belongs_to :band 
end 

Maintenant, quand j'appelle band.members, j'obtiens les objets membres. Ce que je veux, c'est que si j'appelle band.members.last pour obtenir le membre qui a rejoint le dernier. Je réalise cela en définissant la méthode <=> pour Member et trier en fonction de joined:

band.members.sort.last 

Comment puis-je faire de ce défaut de comportement? Je ne veux pas éviter l'appel supplémentaire pour trier. Est-ce possible et si oui, comment?

+0

"Je ne veux pas éviter l'appel supplémentaire pour trier"? Je ne suis pas. Pourquoi ne pas simplement ajouter une méthode qui fait ce que vous voulez avec un nom de méthode clair? – WiredPrairie

+0

@WiredPrairie C'est ma solution actuelle. J'ai une méthode 'latest_band_member' qui exécute' band.members.sort.last'. Je me demandais si cela peut être automatisé grâce à la DSL Mongoid. –

Répondre

10
class Band 
    include Mongoid::Document 
    has_many :members, :order => :joined.asc 
end 
Questions connexes