2

現在、最初に特定のユーザーのすべての友達を取得してから、配列のサイズを友達の数として取得しています。私の懸念は、データベースからすべての友人情報を取得するたびに、潜在的に (または明らかに) 非効率になることです。それで、他の情報を取得せずに、特定のユーザーの友達の数を効果的に照会できる方法があるかどうか疑問に思っていますか?

4

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