2つのモデルが関連付けられています。私はArtistモデルとReviewモデルを持っています。datamapperを使用して結果の順序を指定する
class Artist
include DataMapper::Resource
property :id, Serial
property :name, String
has n, :reviews
end
class Review
include DataMapper::Resource
property :id, Serial
property :rating, Integer
property :body, String
belongs_to :artist
end
私の目標は、それらに関連レビューの平均評価順アーティストの配列を取得することです。私はこれに1行の解決策があるかどうかはわかりませんが、私の現在の方法はアーティストのIDが平均格付けでソートされた配列を作成することです。この配列を取得する方法の詳細はこの質問では重要ではありませんが、今は配列があるとしましょう。
ids_sorted_by_rating = [4,5,23,9,2,48,17,....]
次にアーティストを取得します。
artists = Artist.all(:id => ids_sorted_by_rating)
問題は、別のオプションを指定しない限り、datamapperはid by ordersです。ですから、ids_sorted_by_ratingを取得するのが大変な作業の後、私はまだidによってソートされたアーティストのリストが残っています。
関連するレビューの平均評価によって注文されたアーティストのリストを私に提供するすべての解決策は非常に高く評価されます。ボーナスポイントは、そのリストを取得するのに何百万回もデータベースをヒットする必要がない場合です。 :)
おかげさまで、さらに詳しい情報が必要な場合は、私が提供します。
私はあなたを忘れていませんでした。私はこれを試してみる機会がありませんでした。 – wuliwong
ありがとう、私は解決するためにこの質問を書いていた問題とは別の方向に巻き上げましたが、私は新しい場所でこの同じ問題を思いつきました。私はこれを行うには、datamapper ':through => Resource'と言うのではなく、カスタムアソシエーションを作成する必要があると思います。 – wuliwong