0

わかりました、難しいルビーの質問があります。以下のドキュメントが 1 つのカテゴリに分類されるカテゴリとドキュメントがあります。たとえば、レベル 2 のカテゴリの以下のドキュメントのみ: (ブロック引用はご容赦ください)

カテゴリ 1 --> グループ 1 --> [ドキュメント 1、ドキュメント 2、ドキュメント 3]

  --> Group 2 --> [Doc 4, Doc 5, Doc 6]

猫 2 --> グループ 1 --> [ドキュメント 7]

  --> Group 2 --> [Doc 8]

次のコードを使用して、第 2 レベル (たとえば、グループ 1) の各カテゴリのドキュメント数を正常に決定しました。

category.associated_docs.count

ただし、レベル 1 カテゴリのすべての子のドキュメントの総数を確認するにはどうすればよいですか?

次のことができることは知っていますが、合計を取得するにはどうすればよいですか?

category.children.each do |category|
  category.associated_docs.count

ありがとうございました!

4

1 に答える 1

1

ドキュメントが ActiveRecord にある場合は、SQL クエリを実行して関連するすべてのドキュメントを効率的に選択し、それらのドキュメントをカウントすることができます。そうしないと、Ruby オブジェクトの配列に対する反復を含むコマンドにかなりの時間がかかる可能性があります。

それ以外の場合は、次のようなことを試してください。

カテゴリ.子供.マップ{|カテゴリ| category.associated_docs}.flatten.count

map コマンドは、多くのサブ配列を含む配列を返します。各サブ配列には、各カテゴリに関連付けられたドキュメントが含まれています。flatten コマンドは、これらを単一レベルの配列にマージします。そこから、count を使用してそれらをカウントするのはかなり簡単です。

于 2013-07-13T09:41:49.393 に答える