【问题标题】:Returning distinct or grouped records from a postgres DB using active record queries使用活动记录查询从 postgres 数据库返回不同的或分组的记录
【发布时间】:2014-05-31 13:02:20
【问题描述】:

我被困在 AREL 调用上,我正在尝试为带有 postgres 数据库的 Rails 4.1 应用程序编写。

我的应用具有 User 和 League(users 表和 Leagues 表)的 activerecord 类,它们通过 has_many 关系与 user_leagues 表连接。

我正在尝试在 League 上编写一个实例方法,该方法返回 这个联盟中的用户,按 user_leagues 表中的 end_score 列排序。我可以用 Ruby 做到这一点,但似乎用纯 AREL 应该可以做到。

在伪代码中:select * from users ...inner join user_leagues... group_by user_id order_by end_score

我最近的尝试:

  def ranked_users
    User.joins(:user_leagues).
    where("user_leagues.league_id = ?", self.id).
    group("user_leagues.user_id").order("user_leagues.end_score DESC")
  end

我尝试了 group 和 distinct 的不同变体,但它们都返回了这个错误的一些变体:

PG::GroupingError: ERROR:  column "users.id" must appear in the GROUP BY clause or be used in an aggregate function

有人知道怎么做吗?

【问题讨论】:

    标签: ruby-on-rails ruby postgresql activerecord


    【解决方案1】:

    试试这个...我认为它应该可以工作:

    User.joins(:user_leagues).
      where("user_leagues.league_id = ?", self.id).
      order("user_leagues.end_score DESC")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-06
      • 1970-01-01
      • 1970-01-01
      • 2014-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多