2012-04-07 11 views
0

私は、自分のレイルプロジェクトのドキュメントモデルのリレーションシップ/アソシエーションを設定する方法を理解しようとしています。私はユーザーモデルを持っていて、ユーザーはお互いに友人モデル(友情モデル)を持つことができます。複数のユーザーが編集可能なドキュメントモデルのリレーションシップ

ここでは、ユーザーがCERTAINの友だちにGoogleドキュメントと同様の修正や編集を促す(アクセス権を付与できる)ようにしたいと考えています。

これは、この問題に対する私の現在のアプローチです:

は、「グループ」と呼ばれる新しい関係モデル、友人の本質的サブセットを作成します。ドキュメントはユーザーに属し、ドキュメントはグループに属します。ユーザーは友人をこれらのグループ関係に招待し、これらのグループを通じて文書にアクセスしたり変更したりすることができます。

したがって、ユーザーには多数のグループがあり、グループは多数のユーザーに属します。

私の質問:

  1. は、この問題へのよりよい方法はありますか?

答えて

0

「メンバーシップ」結合テーブルと考えることがあります。だから:

Group >- Membership -< User 

...あなたはいくつかのユーザーが他の能力(編集)を持っていないことが必要なので、オプションのすべての種類は、あなたを与えるだろうたとえばSTIのために、そこからがあります。

class Membership < ActiveRecord::Base 
    ...general membership functions 
end 

class Editor < Membership 
    ...editor specific code... 
end 

class Reviewer < Membership 
    ...reviewer specific code... 
end 

そして

class MembershipController 
    def create invitation 
    if invitation.for_editor? 
     # assuming invitation has one group, and group_memberships method that returns group.memberships 
     invitation.group_memberships.create! user: current_user 
    else 
     invitation.group_memberships.create! user: current_user 
    end 
    end 
end 

のようなコントローラクラスの何か例として、STIのあなたの意見に応じて。

https://github.com/scambra/devise_invitable

は、より多くのアイデアを持っているかもしれません。

+0

ありがとう、これは私の質問にいくつかの光を当てる。 – Huy

関連する問題