Ruby on rails 如何根据Rails中的联接表对结果进行排序?

Ruby on rails 如何根据Rails中的联接表对结果进行排序?,ruby-on-rails,ruby-on-rails-3,rails-activerecord,Ruby On Rails,Ruby On Rails 3,Rails Activerecord,我有账户模型 class Account < ActiveRecord::Base has_many :account_games def score account_games.map(&:score).sum end end 类帐户#,115=>#,126=>#,116=>#,117=>#}嗯,但是没有任何更可读的方法来这样做,比如如果你想根据创建的时间、天气进行更多的查询,或者帐户游戏?为什么我会收到BigDecimal而不是值?让我试着更具体一点,如果

我有账户模型

class Account < ActiveRecord::Base
  has_many :account_games
  def score
    account_games.map(&:score).sum
  end
end
类帐户
和AccountGame:

class AccountGame < ActiveRecord::Base
  belongs_to :account
end
class AccountGame
获得最高分数的帐户的最佳方式是什么?如您所见,分数是相关帐户和游戏分数字段的总和

谢谢

试试看

Account.joins(:account_games).sum('account_games.score', group: :account_id, order: 'sum_account_games_score')
这将为您提供一个散列,其中键是帐户ID,值是总分

您可以将限制选项传递给帐户,以获得前x个帐户。差不多

Account.limit(10).joins(:account_games).sum('account_games.score', group: :account_id, order: 'sum_account_games_score DESC')

我以为我在尝试接近,但我甚至都不接近:)不管怎样,这给了我一些东西,比如=>{125=>#,115=>#,126=>#,116=>#,117=>#}嗯,但是没有任何更可读的方法来这样做,比如如果你想根据创建的时间、天气进行更多的查询,或者帐户游戏?为什么我会收到BigDecimal而不是值?让我试着更具体一点,如果我在帐户中有电子邮件存档,并想将结果显示为[电子邮件,分数]我该怎么做?将组改为组:“accounts.email”。在调用sum之前,仍然可以将条件传递给sum或调用where