0

リストが埋め込まれた製品があります。

そのため、価格順のリストを希望します。私はmongoidとMoney gemを使用しています。ただし、後で (外部 API から) 新しく作成されたリストを追加するため、mongoid による注文は意味がありません。

リストには :price が含まれています。Price は、:cents と :currency を含む Money タイプです。

リスト.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 に答える