Rails:按计数连接表和分组

时间:2014-11-24 10:32:54

标签: mysql ruby-on-rails rails-activerecord

我是Rails的新手,目前正在使用标记系统,我可以为事件分配多个标记,为多个事件分配相同的标记。

Tag模型如下所示:

has_many :taggings,
has_many :events, through: :taggings

事件模型如下所示:

belongs_to :user
has_many :taggings
has_many :tags, through: :taggings

我有三张这样的表:

TAGS
id | name (string)

EVENTS
id | name (string)

TAGGINGS
id | tag_id | event_id

现在我试图获取前10个最常用的标签。我基本上需要将标记和标记表连接在一起,并通过标记中的tag_id进行分组。像这样:

Tagging.group('tag_id').order('count_id DESC').limit(10).count('id')

但是,通过标记连接,我可以获取名称字段。

1 个答案:

答案 0 :(得分:3)

试试这个:

Tag.select('tags.*, COUNT(taggings.id) AS tagging_count').
    joins(:taggings).group('tags.id').
    order('tagging_count DESC').
    limit(10).pluck(:name)