2

我试图计算每个联系人有多少子联系人。

Class Contacts  
has_many :subcontacts, class_name: "Contact",foreign_key: "supercontact_id" 
belongs_to :supercontact, class_name:"Contact"

这是到目前为止我所拥有的 activerecord 部分,这大致就是我想要做的。

Contact.joins{subcontacts.outer}.select(subcontacts.count as subcontact_count)

我认为问题在于连接部分正在寻找关联名称,而选择部分正在寻找表名。问题是表名是同一个表...最好的方法是什么,以便它保持关系或使用 SQL,以便我们可以最小化查询的数量,使其不是 N+1问题?

4

2 回答 2

1

尝试使用

results = Contact.joins(:subcontacts).select("count(subcontacts.id) as count, contacts.id").group("contacts.id")

并且可以将计数获取为

results.map do |result|
  "Contact ID: #{result.id} - Subcontacts Count: #{result['count']}"
end
于 2013-07-31T07:17:32.643 回答
1
Contacts.all.each do |contact|
  puts contact.name =>  contact.subcontacts.count
end

OR

Contacts.all.map{|contact| [contact.name => contact.subcontacts.count]}

以上将为您提供类似 answer{contact_name => subcontacts.count} 的哈希值

于 2013-07-31T10:55:05.737 回答