我试图计算每个联系人有多少个子接触。
Class Contacts
has_many :subcontacts, class_name: "Contact",foreign_key: "supercontact_id"
belongs_to :supercontact, class_name:"Contact"
这是我迄今为止的活跃记录部分,大致是我试图做的事情。
Contact.joins{subcontacts.outer}.select(subcontacts.count as subcontact_count)
我认为问题在于联接部分正在寻找关联名称,而选择部分正在寻找表名。问题是表名是同一个表...这是最好的方法,以便它保持关系或使用SQL,以便我们可以最小化查询的数量,使它不是#39 ;一个N + 1问题?
答案 0 :(得分: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
答案 1 :(得分:1)
Contacts.all.each do |contact|
puts contact.name => contact.subcontacts.count
end
OR
Contacts.all.map{|contact| [contact.name => contact.subcontacts.count]}
以上将为您提供答案{contact_name => subcontacts.count}