現在、最初に特定のユーザーのすべての友達を取得してから、配列のサイズを友達の数として取得しています。私の懸念は、データベースからすべての友人情報を取得するたびに、潜在的に (または明らかに) 非効率になることです。それで、他の情報を取得せずに、特定のユーザーの友達の数を効果的に照会できる方法があるかどうか疑問に思っていますか?
1 に答える
3
user.friends.count
リレーションが正しく宣言されていれば、DB レベルのカウントを生成することができるはずです。
私のコンソールで、生成された SQL クエリ(Drug has_many :details
およびDrugDetail belongs_to :drug
)を参照してください。
irb(main):003:0> Drug.first.details
Drug Load (0.7ms) SELECT "drugs".* FROM "drugs" LIMIT 1
DrugDetail Load (1.9ms) SELECT "drug_details".* FROM "drug_details" WHERE "drug_details"."drug_id" = 1771
=> []
irb(main):004:0> Drug.first.details.count
Drug Load (0.7ms) SELECT "drugs".* FROM "drugs" LIMIT 1
(0.6ms) SELECT COUNT(*) FROM "drug_details" WHERE "drug_details"."drug_id" = 1771
=> 0
irb(main):006:0> Drug.first.details.to_a.size
Drug Load (2.1ms) SELECT "drugs".* FROM "drugs" LIMIT 1
DrugDetail Load (0.5ms) SELECT "drug_details".* FROM "drug_details" WHERE "drug_details"."drug_id" = 1771
=> 0
あなたの場合、次のような関係がある場合:
User has_many :friends
Friend belongs_to :user
次に、これを DB レベルで実行し、最初のコードよりも高速にする必要があります。
User.first.friends.count
于 2013-06-11T14:47:20.413 に答える