2012-12-03 109 views
0

我有以下兩種模式:Rails的 - 該協會最新訂購

class Shelf < ActiveRecord::Model 
    has_many :wines 

    def self.order_by_oldest_bottle_of_wine 
     #TODO: order by the oldest wine bottle... 
    end 
end 

class Wine < ActiveRecord::Model 
    belongs_to :shelf 

    attr_accessible :produce_date 
end 

在貨架的模式,我想訂購由最古老的葡萄酒瓶雜誌架架子上(即最古老的葡萄酒瓶架第一),但並非100%肯定的實施。

非常感謝,

回答

0

如果您正在使用Rails 3.x你可以使用以下任何一種:

解決方案1:

def self.order_by_oldest_bottle_of_wine 
    self.wines.order("produce_date DESC") 
end 

解決方案2:如果你想使用範圍

class Wine < ActiveRecord::Model 
    belongs_to :shelf 
    scope :ordered_by_produce_date, order("produce_date DESC") 
    attr_accessible :produce_date 
end 

class Shelf < ActiveRecord::Model 
    has_many :wines 
    def self.order_by_oldest_bottle_of_wine 
    self.wines.ordered_by_produce_date 
    end 
end 
0
def self.order_by_oldest_bottle_of_wine 
    self.wines.find(:all, :order=>"produce_date DESC") 
end 
+0

理想,我想活動記錄進行排序而不是訴諸簡單的排序。 – alexs333

+1

嗨。我已更新有效記錄。 – vijikumar

1

您可以通過一個名爲範圍內做到這一點

在你Shelf模型,你可以像這樣定義它:

named_scope :order_by_oldest_bottle_of_wine, joins: :wines, order: "wines.produce_date DESC"