0

我有以下两个模型:

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

非常感谢,

4

3 回答 3

1

您可以通过命名范围执行此操作

在您的Shelf模型中,您可以像这样定义它:

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

于 2012-12-03T06:07:36.550 回答
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
于 2012-12-03T06:52:34.620 回答
0
def self.order_by_oldest_bottle_of_wine
    self.wines.find(:all, :order=>"produce_date DESC")
 end
于 2012-12-03T06:04:03.787 回答