Ruby 计算具有特定关联的对象数量的代码
Ruby code to count number of objects with a certain association
我的应用程序的每个用户都可以拥有多个通行证。每个通行证可以属于一个单一的路线。通行证可以是活动的或非活动的。
我想计算具有属于特定路线的属性 'active' 的通行证的用户数量。
执行此操作的最佳方法是什么?
谢谢!
我犹豫要不要回答,因为我没有看到付出努力的例子,但是...
我会做这样的事情,因为这些单独看起来也很有用。
class User
...
has_many :routes, through: :passes
scope :with_active_passes, ->{joins(:passes).where(passes:{active: true})}
scope :by_route, ->(route){joins(:routes).where("routes.route_id = ?", route)}
end
然后你可以调用
User.with_active_passes.by_route(route_id)
这也将允许您单独使用
User.with_active_passes #only users with active passes
User.by_route(route_id) # only users with passes that have a specific route_id
User.with_active_passes.by_route(route_id) # only users with active passes that have a specific route_id
您也可以将 route_id 更改为路由中的任何列,而不必是 id。要找出有多少,只需将 #size
或 #count
添加到方法链的末尾即可。
我的应用程序的每个用户都可以拥有多个通行证。每个通行证可以属于一个单一的路线。通行证可以是活动的或非活动的。
我想计算具有属于特定路线的属性 'active' 的通行证的用户数量。
执行此操作的最佳方法是什么?
谢谢!
我犹豫要不要回答,因为我没有看到付出努力的例子,但是...
我会做这样的事情,因为这些单独看起来也很有用。
class User
...
has_many :routes, through: :passes
scope :with_active_passes, ->{joins(:passes).where(passes:{active: true})}
scope :by_route, ->(route){joins(:routes).where("routes.route_id = ?", route)}
end
然后你可以调用
User.with_active_passes.by_route(route_id)
这也将允许您单独使用
User.with_active_passes #only users with active passes
User.by_route(route_id) # only users with passes that have a specific route_id
User.with_active_passes.by_route(route_id) # only users with active passes that have a specific route_id
您也可以将 route_id 更改为路由中的任何列,而不必是 id。要找出有多少,只需将 #size
或 #count
添加到方法链的末尾即可。