Ruby代码用于计算具有特定关联的对象数

时间:2015-01-06 17:40:14

标签: ruby-on-rails ruby ruby-on-rails-4

我的每个应用用户都可以拥有多个通行证。每个Pass都可以属于一个Route。通行证可以是活动的也可以是非活动的。

我想计算具有属于特定路线的“有效”属性的通行证的用户数。

这样做最好的方法是什么?

谢谢!

1 个答案:

答案 0 :(得分:2)

我犹豫回答,因为我看不到任何努力的例子,但......

我会做这样的事情,因为这些似乎也是分开的。

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添加到方法链末尾的数量。