我正在尝试创建一个包含所有" Stories"的旧列表的新列表。我的网站。
每个故事都包含几个章节,对它们进行了多次投票。我想要一个新的列表,其中所有故事都以投票数量排序。
到目前为止,这是我的代码:
def mostVoted
allStories = Story.all
allStories.each do |story|
votes = 0
story.chapters.each do |chapter|
votes = votes + chapter.votes.count
end
end
end
有人可以帮我进一步吗?谢谢!
答案 0 :(得分:2)
为什么不使用诸如
之类的查询Story.joins(:chapters).order("count(chapters.votes)").select("stories.name").group("stories.name")
这将有助于消除与上述答案相关的n + 1个查询。不确定你想要获得什么数据,所以我采取了一些自由。
答案 1 :(得分:1)
def mostVoted
Story.all.sort_by do |story|
story.chapters.map do |chapter|
chapter.votes.count
end.reduce(0, :+)
end
end
答案 2 :(得分:-1)
def mostVoted
Story.all
.sort_by{|story| story.chapters.inject(0){|n, chapter| n + chapter.votes.count}}
end