2

ここで私のモデルを見ることができます:

https://gist.github.com/768947

何が起こっているのかを説明するために、いくつかのモデルがあります。私のアプリの中核には、プロジェクト、ステージ、アップロード、コメント、ユーザーがあります。次に、ユーザー認証を管理するための役割と割り当てがあります。

これはプラグイン declarative_authorization とログイン用のデバイスで行っています。

最初の質問は、「ロール」の列をユーザー モデル/テーブルに追加し、そこに各ユーザーのロールを保存する方がよいのでしょうか? 複数のロールを持つユーザーがいる場合は、すべてのロールを配列として保存し、必要に応じて循環させることができます。

それとも、2 つの別々のテーブルと多数の結合を使用して割り当てをセットアップする、今セットアップしたようにする方がよいでしょうか? 私には、デザイナー、クライアント、管理者、スーパーユーザーの 4 つのロールしかありません。

コンピューティング リソースの観点からは、結合よりも列を使用して各クエリを実行する方が「安価」であるという意味で優れていますか、それともその違いはそれほど重要ではありませんか?

私の質問の根本は...現在、 current_user に割り当てられたプロジェクトを取得したい場合は、単純current_user.projects.each do |project|にそのように循環させます。これは私が行った後です:@projects = current_user.projectsプロジェクトコントローラーで。ユーザーとロールを除く、他のすべてのモデルにも同じことが当てはまります。

ただし、「クライアント」ロールを持つユーザーを見つけたい場合は、非常に複雑になります。それとも私はそれを過度に複雑にしていますか?

どんな助けでも大歓迎です。

4

1 に答える 1

2

ユーザーテーブルとロールテーブルは分けたほうがいいと思います。ユーザーは多くの役割を持つことができ、多くのユーザーは同じ役割を持つことができるため、これは多対多の関係です。これを行うには、JOIN テーブル (user_role など) が必要です。私は3つのテーブルをお勧めします。もちろん、ユーザーとロールの両方の主キーがあります。user_role テーブルには 2 つの列 (主キーごとに 1 つ) と、それぞれのテーブルへの外部キー関係があります。

したがって、「client」ロールを持つすべてのユーザーが必要な場合は、user と user_role 間の簡単な JOIN です。特定のユーザーの役割が必要な場合は、3 つのテーブルを結合する必要があります。

ユーザーの役割の配列はお勧めしません。これは第 1 正規形に反します。

于 2011-01-07T12:37:18.773 に答える