以mongoid的金额订购

时间:2013-03-15 19:48:26

标签: ruby-on-rails ruby mongoid currency

我的产品有嵌入式列表。

因此,我想在价格上订购一份清单。我正在使用mongoid&钱宝石。但是,我后来添加了新创建的列表(来自外部apis),所以通过mongoid进行排序是没有意义的。

清单包含:价格。价格是货币类型,包含:美分& :货币

listing.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">] 

2 个答案:

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

每次进入新的商家信息时,这都会出错,所以我可能会在每次检索商品时对商家信息进行排序。

答案 1 :(得分:0)

在Listing类中,定义一个&lt; =&gt;方法

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

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

product.listings.sort

或者定义一个方法,listing_by_price:

def listings_by_price
  listings.sort
end