【问题标题】:order records based on count of associated records posted by distinct users in rails根据不同用户在 Rails 中发布的相关记录计数来订购记录
【发布时间】:2017-07-30 10:51:16
【问题描述】:

我有 3 个模型。用户、语言、链接。链接属于用户和语言。我想在主页上创建前五种最活跃的语言列表。因此,我想按照在该语言下发布链接的不同用户数量的降序排列五种语言。

例如。西班牙语有 6 个链接,全部由 3 个不同的用户发布。摩洛哥有 7 个链接,由 2 个不同的用户发布。法语有 5 个链接,由 5 个不同的用户发布。

所以语言的顺序必须是法语、西班牙语、摩洛哥语。

这是每个对象的模型:-

class User < ApplicationRecord
  has_many :links

class Language < ApplicationRecord
  belongs_to :user
  has_many :links

class Link < ApplicationRecord
  belongs_to :user
  belongs_to :language

我是 Rails 的初学者,但我尝试了一些方法来了解它是如何完成的。

例如,我尝试了Link.select(:user_id).distinct.count,它会计算发布链接的唯一用户数。但我不知道如何根据在该语言下发布链接的不同用户的数量来排序 语言。非常感谢您的帮助。

【问题讨论】:

  • 你使用什么版本的Rails

标签: ruby-on-rails


【解决方案1】:

据我了解,语言通过链接有很多用户。因此,您可以将 has_many 关联添加到 Language

class Language
  has_many :users, through: :links
end

然后在languages上左加入users表并按用户数排序。

由于Rails 5left_joins方法,就可以这样执行:

Language.left_joins(:users).group(:id).order("count(users.id) DESC").limit(5)

如果您不想显示没有链接的语言,可以将left_joins 替换为joins

【讨论】:

  • 我想知道有很多通过关联,不知道如何使用它。这有助于澄清。谢谢!
猜你喜欢
  • 2013-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-01
  • 2014-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多