0

我有一个与“用户”、“商店”和“权限”相关的连接模型“用户权限”。

我希望能够基于 Shop 的 id 使用在 User 模型上调用的范围来预先加载 Permission 的所有实例。

创建的范围如下所示:

User.for_shop(1)

这将为用户发出一个查询,然后对 Permission 发出一个后续查询,该查询与 UserPermission 连接,其中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

第二行不会命中数据库;该用户的权限已在上一行中预先加载。

于 2013-03-07T20:06:30.337 回答