2

すべての連絡先が持っているサブ連絡先の数を数えようとしています。

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を使用して、クエリの数を最小限に抑えてN + 1にならないようにすることができます問題?

4

2 に答える 2

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 に答える