对于模糊的问题,我很抱歉,我不知道该怎么回答。
假设您有两个模型,Owner
和Article
。 Owner
可以包含多个Articles
。我想要一个包含Owner
模型内容的列表,以及与每个Articles
对应的Owner
计数。
看起来像这样:
owner_id | Name | COUNT
-----------------------
| 1 | Tom | 20
| 2 | Bob | 10
| 3 | Karl | 5
| 4 | Bart | 24
| 5 | Zack | 0
目前我已尝试执行以下操作:
Owner.joins(:articles).select('id_owner, owner.name, COUNT(owner.id_owner)')
.group(:id_owner).order('count(articles.id_article) desc')
这是有效的,但有一种更简单的方法可以用ActiveRecord
来表达吗?我觉得在select
中将其分解为SQL有点像hacky,也许别无他法?
答案 0 :(得分:1)
如果您不介意在articles_count
表格中添加一个额外的字段owners
,那么您可以使用AR counter_cache
。
class Owner < ActiveRecord::Base
has_many :articles
end
class Articles < ActiveRecord::Base
belongs_to :owner, counter_cache: true
end
然后,AR会自动更新articles_count
表格上的owners
列,并且您始终拥有关联的所有者文章计数,而不会对您的数据库造成压力。
至于您的原始问题,我不认为AR有一个界面可以让您从另一个表格中添加 COUNT(field)
字段到您的模型。