0

我有带有嵌入式列表的产品。

因此,我想要一份按价格排序的清单。我正在使用 mongoid & Money gem。但是,我后来添加了新创建的列表(来自外部 api),所以通过 mongoid 排序没有意义。

清单包含:价格。Price 是 Money 类型,包含 :cents 和 :currency。

清单.rb:

scope :order_on_price, order_by("price.cents" => "desc")

这也不起作用:

  scope :order_on_price, sort_by{ |price| price[:cents]}

products_controller.rb(加载外部 api 后):

@product.listings = @product.listings.order_on_price

我究竟做错了什么?谢谢..

更新:

添加了控制台输出:

1.9.3-p327 :005 > Product.last.listings
 => [#<Listing _id: 514374bc98d12b3a3f00a164, created_at: 2013-03-15 19:21:32 UTC, updated_at: 2013-03-15 19:21:32 UTC, price: {"cents"=>3755, "currency_iso"=>"EUR"}, availability: true, scan_id: "513f4cdf3e15fce2eaec43b6">] 
4

2 回答 2

0

在 Listing 类上,定义一个 <=> 方法。

def <=>(other)
  other.price <=> price
end

现在您可以像这样引用列表:

product.listings.sort

或者定义一个方法,listings_by_price:

def listings_by_price
  listings.sort
end
于 2013-03-15T20:49:10.230 回答
0

如果您必须按顺序列出清单,我会这样做:

Product.all.each do |product|
  reordered_listings = product.listings.order_on_price
  product.listings.clear
  reordered_items.each { |i| product.listings.create i.attributes }
end

每次您输入新列表时,这都会以错误的顺序排列,因此我可能只会在您每次检索产品时对列表进行排序。

于 2013-03-15T20:07:56.563 回答