0

私は Rails 3 を使用しており、ユーザーがレンタルするオブジェクトを配置できるアプリを構築しています。オブジェクトごとに、次のことを決定できます。

  • オブジェクトは全世界でレンタルできるか (潜在的に)、またはレンタルできないか (オブジェクトへのアクセスは制限されています)
  • オブジェクトは友達だけがレンタルできます(アプリ内、has_many friends, :through => friendship協会経由)
  • オブジェクトは、次のグループのメンバーがレンタルできます (ユーザーは、自分が属するすべてのグループ、またはこれらのサブセットのいずれかを選択します)

私の質問は、 current_user が見ることができるオブジェクトのリストを表示する方法ですか? 2 つのオプションが表示されます。どちらが最適か、または同等かどうかを知りたいです。

1) オブジェクト コントローラーで、ユーザーが表示できるオブジェクトのコレクション (@ objects = Object.can_see(current_user)) を作成し、これをインデックス ビューに渡し、リスト全体を表示します。

2) コントローラーで、すべてのオブジェクトを収集(@objects = Object.allし、これをインデックス ビューに渡し、ビューで、オブジェクトごとに一連のテストを実行して、オブジェクトを表示するかどうかを決定します。

4

1 に答える 1

1

最終的には、プロジェクトの方向性に基づいて決定するのは、実際にはあなた次第です。ただし、実際には 3 つのオプションがあります。

  1. SQL ステートメントを介してクエリ全体を処理します。
  2. SQL ステートメントを介して初期フィルタリングの一部を処理し、返されたデータをフィルタリングします。
  3. SQL ステートメントを介してすべてのデータを返し、返されたデータをフィルター処理します。

SQL データベースは高速データ アクセスを実行するために構築されていることに注意してください。フィルター処理する非常に小さなデータ セットを返す場合を除き、ソリューションに初期フィルター処理がなかったとしたら、非常に驚​​かれることでしょう。最終的には、ロジックがどれほど複雑か (SQL で表現しても理解できるか)、各オプションのパフォーマンス、およびソリューションのスケーラビリティにかかっています。

また、ビジネス ロジックとデータ アクセスの境界をあいまいにするのに役立つ優れた ORM も多数あります。それらの多くは、コードに基づいて複雑な SQL を動的に作成します。

于 2012-06-27T10:31:17.767 に答える