1

Player、 、Detailおよびの 3 つのモデルがありHeroます。APlayerには多くの がありDetails、 a は aDetailに属していHeroます。ここで、プレイヤーがプレイしたすべてのヒーローを取得したいと考えています。ここまで思いついた。

Hero.where("id IN (SELECT hero_id FROM details WHERE player_id = 1)").group("id")

Player をスコープに渡すこともできるように、スコープを作成するにはどうすればよいですか? これは私がこれまでに得たものですが、Details. Heroまた、最後に x 回の Hero1、x 回の Hero2 などをすべて数えたいと思います。

scope :heroes, ->(player)  { where('player_id = ?', player.id).group("id") }

このスコープはDetailモデル内にあります。戻ってほしくないので、それが最適な場所かどうかはわかりHeroesませんDetails

4

2 に答える 2

2

ようやく、かなりの時間をかけHeroesて、スコープを最大限に活用する方法を見つけました。

scope :mostplayed, ->(player) { select('details.*, count(heros.id) AS hero_count').joins(:hero).where('player_id = ?', player.id).group('hero_id').order('hero_count DESC').limit(3) }

最善の解決策ではないかもしれませんが、私がやりたいことを正確に実行します。

于 2013-09-13T14:33:31.163 に答える