我有一个与“User”,“Shop”和“Permission”相关的连接模型“UserPermission”。
我希望能够根据Shop的ID在用户模型上调用的范围内加载Permission的所有实例。
创建的范围如下所示:
User.for_shop(1)
这会为用户发出一个查询,然后是针对UserPermission加入的权限的后续查询shop_id == 1
答案 0 :(得分: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
第二行不会命中数据库;该用户的权限已在上一行中急切加载。