我有 3 个模型Player
,Detail
和Hero
。APlayer
有很多Details
,aDetail
属于a 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
。