0

「ユーザー」、「ショップ」、「許可」に関連する結合モデル「UserPermission」があります。

Shop の ID に基づいて User モデルで呼び出されるスコープを使用して、Permission のすべてのインスタンスを熱心にロードできるようにしたいと考えています。

作成されるスコープは次のようになります。

User.for_shop(1)

これにより、ユーザーに対して 1 つのクエリが発行され、次に UserPermission に対して結合する Permission に対するフォローアップ クエリが発行されます。shop_id == 1

4

1 に答える 1

0

これはあなたが望むことをするはずです:

scope :for_shop, lambda { |shop_id| where(:shop_id => shop_id).includes(:permissions) }

別の(同等の)オプションがあります:

Shop.find(1).users.includes(:permissions)

どちらの方法でも、範囲指定されたユーザーのリストを取得できます。それらの権限は熱心に読み込まれるため、次のようなことを行うと:

user = User.for_shop(1).first
user.permissions

2 行目はデータベースにヒットしません。そのユーザーのアクセス許可は、前の行で熱心に読み込まれています。

于 2013-03-07T20:06:30.337 に答える