gpt4 book ai didi

ruby - 使用数据映射器指定结果的顺序

转载 作者:太空宇宙 更新时间:2023-11-03 16:34:40 25 4
gpt4 key购买 nike

我有两个关联的模型。我有一个艺术家模型和一个评论模型。

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

我的目标是检索一组按相关评论的平均评分排序的艺术家。我不确定是否有解决方案,但我目前的方法是创建一个数组,其中包含按平均评​​分排序的艺术家的 ID。我如何获得这个数组的细节对于这个问题并不重要,但假设我现在有一个数组。

ids_sorted_by_rating = [4,5,23,9,2,48,17,....]

然后我检索艺术家。

artists = Artist.all(:id => ids_sorted_by_rating)

问题是 datamapper 按 :id 排序,除非您指定另一个选项。因此,在我努力获得 ids_sorted_by_rating 之后,我仍然只剩下按 :id 排序的艺术家列表。

任何能给我一份按相关评论的平均评分排序的艺术家列表的解决方案都将不胜感激。如果我不需要访问数据库一百万次来获取该列表,则可以获得奖励积分。 :)

谢谢,如果您需要更多信息,请询问,我会提供!

最佳答案

据我所知,在 DataMapper 中没有通过聚合进行排序的简单方法(在单个查询中进行排序的方法)。您可以使用应用程序端的结果重新排序(除非您的数据集对于此来说太大):

hash = artists.index_by(&:id)
# if you do not have index_by - use a artists.inject({}){|h,a| h.merge(a.id => a)}
ids_sorted_by_rating.map{|id| hash[id]}

关于ruby - 使用数据映射器指定结果的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9641703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com