【问题标题】:Rails order user based on number of badges with Gem MeritRails 根据带有 Gem Merit 的徽章数量为用户排序
【发布时间】:2018-03-13 19:53:34
【问题描述】:

我在根据用户收集的徽章数量对用户进行排序时遇到问题。我正在使用 Gem Merit 制作徽章系统。 所以如果我想收集用户的徽章,代码将是user.badges,它将转换为 sql as

Merit::Sash Load (1.6ms)  SELECT  "sashes".* FROM "sashes" WHERE "sashes"."id" = ? LIMIT ?  [["id", 5], ["LIMIT", 1]]
Merit::BadgesSash Load (1.4ms)  SELECT "badges_sashes".* FROM "badges_sashes" WHERE "badges_sashes"."sash_id" = ?  [["sash_id", 5]]

在用户模型中,我将 Merit 和 has_merit 代码包含在优点文档中,当我编写 users = User.where(id: user_ids).left_joins(:merit).order(is_verified: :desc).group(:id).order("count(badges.id) desc") 时,它会显示错误,因为它无法识别 meritbadges.id

如何根据拥有最多徽章的用户对用户进行实际排序?谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby merit-gem


    【解决方案1】:

    我从未尝试过功德。但是,如果您能够从用户那里获得徽章。然后以下查询将按降序给出 USER_ID ==> BADGES_COUNT。

    User.joins(:badges).group('users.id').order("count(badges.id) DESC").count

    【讨论】:

    • 不,它不会工作。我试过了。因为 Gem Merit 不使用 ActiveRecord ActiveRecord::ConfigurationError: Can't join 'User' to association named 'badges'; perhaps you misspelled it?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多