Ruby on rails 如何从已与相同模型/类/表联接的表中进行选择?
我想知道每个联系人有多少次分包Ruby on rails 如何从已与相同模型/类/表联接的表中进行选择?,ruby-on-rails,postgresql,activerecord,Ruby On Rails,Postgresql,Activerecord,我想知道每个联系人有多少次分包 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.cou
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问题?尝试使用
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
上面将为您提供类似哈希的答案{contact_name=>subcontacts.count}谢谢。这可能有效,但理想情况下,我希望将其作为activerecord关系保留。我简化了粘贴在这里的代码,但很大程度上取决于结果是一个关系,而不是一个数组。
Contacts.all.each do |contact|
puts contact.name => contact.subcontacts.count
end
OR
Contacts.all.map{|contact| [contact.name => contact.subcontacts.count]}