0

Heroku で Rails 4 + Postgres バックエンドを使用したゲームがあります。私たちの毎日のリーダーボードには、ゲームで最高の 100 のスコアが表示されます。User モデルと Score モデル (User has_many :scores) があります。

次のように期待どおりに動作します。

class Score < ActiveRecord::Base
  belongs_to :user

  def self.daily_leaders
    where(['created_at > ? and created_at < ?', Time.now.beginning_of_day, Time.now.end_of_day]).order("points DESC").limit(100)
  end
end

しかし、これを変更して、各ユーザーの最高スコアのみを表示するようにします。追加の .select() .distinct および .pluck ActiveRecord メソッドのすべての組み合わせを試しましたが、常に PG エラーが発生します。

今日だけの各ユーザーの最高得点だけを取得する適切な方法は何でしょうか?

4

1 に答える 1

2
class Score < ActiveRecord::Base
  belongs_to :user

  def self.user_max_scores
    where('date(created_at) = ?', Date.today).select('user_id, max(points) as max_points').group(:user_id)
  end
end
于 2013-10-23T20:52:17.787 に答える