我的产品有嵌入式列表。
因此,我想在价格上订购一份清单。我正在使用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">]
答案 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