Ruby on rails ActiveRecord:对关系计数求和
我有这样的模型:Ruby on rails ActiveRecord:对关系计数求和,ruby-on-rails,ruby,activerecord,ruby-on-rails-4,Ruby On Rails,Ruby,Activerecord,Ruby On Rails 4,我有这样的模型: class Manufacturer has_many :models end class Model belongs_to :manufacturer has_many :widgets end class Widget belongs_to :model end 如何在制造商上定义小部件计数方法?也就是说,属于该制造商的所有模型的所有小部件的总和 例如,如果我有一个有3个模型的制造商,并且每个模型都有3个小部件,那么我希望制造商上的小部件计数方法返回9
class Manufacturer
has_many :models
end
class Model
belongs_to :manufacturer
has_many :widgets
end
class Widget
belongs_to :model
end
如何在制造商
上定义小部件计数
方法?也就是说,属于该制造商的所有模型的所有小部件的总和
例如,如果我有一个有3个模型的制造商,并且每个模型都有3个小部件,那么我希望制造商
上的小部件计数
方法返回9
这会起作用,但我想知道是否有一种方法可以通过ActiveRecord实现:
manufactuer.models.map { |m| m.widgets.count }.sum
Manufacturer.
joins('left join models on models.manufacturer_id = manufacturer.id left join widgets on widgets.model_id = models.id').
select('manufacturer.*, count(widgets.id) as widget_count').
group('manufacturer.id')
ActiveRecord中的左加入+组+计数:
manufactuer.models.map { |m| m.widgets.count }.sum
Manufacturer.
joins('left join models on models.manufacturer_id = manufacturer.id left join widgets on widgets.model_id = models.id').
select('manufacturer.*, count(widgets.id) as widget_count').
group('manufacturer.id')
Manufacturer.find(1).widget_count#=>3
我正在添加engineersmnky在对问题的评论中指出的答案,因为这正是我想要的
将此关联添加到制造商
型号:
has_many :widgets, through: :models
本文提供了更多信息:.我想做一些类似于
manufacturer.models.sum(:count)
,但count不是一个字段。有没有办法用ActiveRecord做到这一点?我已经编辑了我的问题,希望能更清楚一点。只需将关联添加到制造商
,例如有很多:小部件,通过::模型
,然后制造商.小部件.计数
就可以了。