2013-09-24 4 views
1

У меня есть два класса с отношением 1-n. Как так:Настроить отношение Mongoid для возврата отсортированных объектов

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 

Теперь, когда я называю band.members я получаю объекты члена. Я хочу, чтобы, если я позвоню band.members.last, чтобы получить участника, который присоединился к последнему. Достичь этого путем определения метода <=> для Member и сортировки на основе joined:

band.members.sort.last 

Как я могу сделать это поведение по умолчанию? Я не хочу избегать дополнительного вызова для сортировки. Возможно ли это, и если да, то как?

+0

«Я не хочу, чтобы избежать дополнительного вызова для сортировки»? Я не следую. Почему бы просто не добавить метод, который делает то, что вы хотите, с явным именем метода? – WiredPrairie

+0

@WiredPrairie Это мое текущее решение. У меня есть метод 'latest_band_member', который выполняет' band.members.sort.last'. Я задавался вопросом, может ли это быть автоматизировано через Mongoid DSL. –

ответ

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