Rails - 按协会日期排序

时间:2012-12-03 05:58:19

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord

我有以下两种模式:

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%确定实施。

非常感谢,

3 个答案:

答案 0 :(得分:1)

您可以通过命名范围

执行此操作

Shelf模型中,您可以这样定义:

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

答案 1 :(得分:0)

def self.order_by_oldest_bottle_of_wine
    self.wines.find(:all, :order=>"produce_date DESC")
 end

答案 2 :(得分: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