2

他のユーザーのプロファイルを編集するには、ユーザー権限を設定する必要があります。

私が欲しいのは、ユーザーごとに処理できるユーザーを設定できるようにすることです。たとえば、A、B、C、D、E の 5 人のユーザーがいるとします。

A が B、C、D を処理できるようにしたい。B が A、E、C を処理できるようにしたい。などなど...

これは 1 対多の関係ですか、それとも多対多の関係ですか?

1人のユーザーが複数のユーザーを持つため、1対多のように見えるため、理解できません。しかし、ユーザー自体は別のユーザーで処理できるため、多対多になる可能性があると思います。

適切な関係を特定するために、自分自身にどのような質問をする必要がありますか?

4

5 に答える 5

5

1 つのアカウントで複数のアカウントを編集でき、複数のアカウントで 1 つのアカウントを編集できるため、これは多対多の関係です。

例:

A can edit ABC  
B can edit AC 
C can edit BC

したがって、A は複数のアカウントで編集でき (または複数のアカウントに属し)、複数のアカウントを編集できます (または複数のアカウントを持っています)。

于 2012-08-06T14:28:46.900 に答える
4

問題を解決し、関係を特定する方法を見てみましょう。

ユーザーが承認されているかどうかを確認するコードを作成する場合、編集を実行しているユーザーと編集中のユーザーの 2 つの主要なデータが必要になります。したがって、アプリケーションが尋ねる質問は、「ユーザー A がユーザー B を編集できるか?」ということです。

リレーションシップのセマンティクスを少し無視して、その質問に対する答えをどのように調べるかを考えてみてください。

table can_edit:
  requestor_id | edited_id | permission
  =====================================
  User A       | User B    | YES
  User A       | User C    | YES
  User A       | User D    | YES
  User A       | User E    | NO
  User B       | User A    | YES
  User B       | User C    | YES
  User B       | User D    | NO
  etc...

このルックアップ テーブルを使用して、誰が誰を編集するためのアクセス権を持っているかを判断できます。しかし、この表が何を説明しているかをもう一度見てください。YES/NO の質問に対する答えを探しているので、もっと簡単に表現できます。

table can_edit:
  requestor_id | edited_id | permission
  =====================================
  User A       | User B    | YES
  User A       | User C    | YES
  User A       | User D    | YES
  User B       | User A    | YES
  User B       | User C    | YES
  etc...

NOここでは、アクセス許可を削除しました。ここで、 「パーミッション チェックに一致するエントリがあるか?」と尋ねることができます。can_editルックアップを実行して行が存在する場合は、アクセスを許可できます。

現在、permission列は常に であるためYES、それを含める意味はあまりありません。これで、基本的にユーザー ID の関係のリストであるテーブルができました。

この時点で、データベース ダイアグラムを使用して関係がどのように見えるかを描くことができます。

users:
  user_id  <-----+
  email          |       can_edit:
  pass_digest    +-------- requestor_id
               +========== edited_id
users:         |
  user_id <====+
  email
  pass_digest

Rails Association guideのサンプル図を見ると、この図が と の両方has_many :throughによく一致していることがわかりますhas_and_belongs_to_many。これらはどちらも多対多の関係を表しています。

実装の詳細に関する限り、「ユーザー A はユーザー B を編集できますか?」の両方に気付くでしょう。「ユーザー B はユーザー A の友達ですか?」関係に異なる用語を使用しているだけで、基本的に同じ質問です。その知識があれば、Ryan Bates によるこの優れたスクリーンキャストなど、この自己参照has_many :through関係を定義する方法について多くのことが書かれていることがわかります。

于 2012-08-06T15:32:56.350 に答える
2

よくわからない場合は、Rails の関連付けに関するガイドを読むことをお勧めします。問題を説明するいくつかの良い例とスキーマの写真があります。

http://guides.rubyonrails.org/association_basics.html#the-has_and_belongs_to_many-association

于 2012-08-06T14:30:09.777 に答える
0

あなたの例Aでは関係の両側にあるため、これは多対多の関係です。

于 2012-08-06T14:28:31.423 に答える
0

私はM2Mの関係だと思います. 複数のHoyと複数の関連があります。

于 2012-08-06T14:30:45.473 に答える