【发布时间】:2019-02-15 21:44:28
【问题描述】:
我有两个型号 Issue 和 Label。他们有一个多对多的关系。
我有一个方法可以返回指向最多问题的十个标签。
class Label < ApplicationRecord
has_many :tags
has_many :issues, through: :tags
def self.top
Label.joins(:issues)
.group(:name)
.order('count_id desc')
.count(:id)
.take(10)
end
end
它完全符合我的预期,但我想知道是否可以在没有 SQL 字符串的情况下编写查询。
order('count_id DESC') 让我很困惑。 count_id 来自哪里?没有名为 count_id 的列。
Label.joins(:issues).group(:name).column_names
#=> ["id", "name", "created_at", "updated_at"]
我找到了一些 SQL 示例 here。我觉得和ORDER BY COUNT(Id)基本一样:
SELECT COUNT(Id), Country
FROM Customer
GROUP BY Country
ORDER BY COUNT(Id) DESC
是否可以在不传入 SQL 字符串的情况下执行相同的查询?单独使用ActiveRecord查询接口可以吗?
【问题讨论】:
标签: sql ruby-on-rails activerecord rails-activerecord