Ruby on rails mongoid中按金额排序的订单

Ruby on rails mongoid中按金额排序的订单,ruby-on-rails,ruby,mongoid,currency,Ruby On Rails,Ruby,Mongoid,Currency,我有嵌入列表的产品 因此,我想订购一份价格清单。我正在使用mongoid&Money gem。但是,我后来添加了新创建的列表(来自外部API),因此通过mongoid进行排序没有意义 清单包含:价格。价格是一种货币类型,包含:美分和:货币 listing.rb: scope :order_on_price, order_by("price.cents" => "desc") 这也不起作用: scope :order_on_price, sort_by{ |price| price[:

我有嵌入列表的产品

因此,我想订购一份价格清单。我正在使用mongoid&Money gem。但是,我后来添加了新创建的列表(来自外部API),因此通过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后):

我做错了什么?谢谢

更新:

添加了控制台输出:

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">] 
1.9.3-p327:005>Product.last.listings
=>[#3755,“货币iso”=>“欧元”},可用性:true,扫描id:“513f4cdf3e15fce2eaec43b6”>]

如果您必须按顺序排列列表,我会这样做:

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
product.listings.sort

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

在listing类中,定义一个方法

或定义一种方法,按价格列出:

def listings_by_price
  listings.sort
end

如果您试图基于所有列表进行订购,那么您需要使用
所属\u to
否,而不是基于所有列表,将列表作为单独的文档进行订购。纯粹是Product.listings中的那些,你能发布@Product.listings的rails控制台输出吗?@beck03076,包括在内!感谢@tdahlke,但是:它给出了以下错误:NoMethodError:undefined方法“[]”(顺便说一句,我很抱歉,我还更改了美分->分数)
product.listings.sort
def listings_by_price
  listings.sort
end