Ruby on rails mongoid中按金额排序的订单
我有嵌入列表的产品 因此,我想订购一份价格清单。我正在使用mongoid&Money gem。但是,我后来添加了新创建的列表(来自外部API),因此通过mongoid进行排序没有意义 清单包含:价格。价格是一种货币类型,包含:美分和:货币 listing.rb: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[:
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