Rails按另一个表中列的频率排序

时间:2014-08-08 14:04:24

标签: sql ruby-on-rails sorting

我有一张桌子KmRelationship,它关联关键词和电影

在关键字索引中,我想列出KmRelationships表中最常出现的所有关键字,并且只列出(20)

.order似乎无论我如何使用它,我把它放在哪里都适用sort_by

这听起来相对简单,但我似乎无法让它发挥作用

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

假设您的KmRelationship表格有keyword_id

top_keywords = KmRelationship.select('keyword_id, count(keyword_id) as frequency').
                              order('frequency desc').
                              group('keyword_id').
                              take(20)

这可能在您的控制台输出中看起来不正确,但这是因为rails没有为计算出的frequency列构建对象属性。

您可以看到如下结果:

top_keywords.each {|k| puts "#{k.keyword_id} : #{k.freqency}" }

为了充分利用它,您可以绘制出实际的关键字对象:

class Keyword < ActiveRecord::Base
  # other stuff

  def self.most_popular
    KmRelationship.
      select('keyword_id, count(keyword_id) as frequency').
      order('frequency desc').
      group('keyword_id').
      take(20).
      map(&:keyword)
  end
end

并致电:

Keyword.most_popular

答案 1 :(得分:0)

@posts = Post.select([:id,:title])。order(“created_at desc”)。limit(6)

我在我的控制器索引方法中列出了这个,它允许命令显示最后一个限制为6的帖子。它可能类似于你想要做的事情。此代码实际上反映了我主页上的最新帖子。