次のモデルが与えられます:
team.rb
class Team < ActiveRecord::Base
has_many :events, :dependent => :destroy
has_many :challenges, :through => :events
validates :name, :presence => true, :uniqueness => true
end
Challenge.rb
class Challenge < ActiveRecord::Base
has_many :events, :dependent => :destroy
has_many :teams, :through => :events
validates :name, :presence => true, :uniqueness => true
validates :flag, :presence => true, :uniqueness => true
end
event.rb
class Event < ActiveRecord::Base
belongs_to :team
belongs_to :challenge
validates :team, :presence => true
validates :challenge, :presence => true
end
「ランク」が最も高いチームを表示したい。最高ランクのチームが最も多くの課題を完了した場所(イベント)。Xイベントで同点の場合、X番目のイベントを最初に完了したチームが最高ランクになります。
そのため、イベントの数に基づいてチームを簡単に並べ替えて、表示することができます。
そのようです:
def index
@teams = Team.includes(:events).
select("*, COUNT(events.id)").
group("teams.id, events.id").
order("COUNT(events.id) DESC")
end
しかし、同点の場合の対処法がわかりません。SQLでこれを行う良い方法を知っている人はいますか?
アプリサーバーで追加の手順を実行するのではなく、SQLを使用してこれを実行したいと思います。
ありがとう!!