根据投票数对列表进行排序

时间:2014-07-28 15:32:51

标签: ruby-on-rails ruby postgresql

我正在尝试创建一个包含所有" 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

有人可以帮我进一步吗?谢谢!

3 个答案:

答案 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