我正在尝试弄清楚如何为我的rails项目设置文档模型的关系/关联。我有一个用户模型,用户可以互相加好友(友谊模型)。
现在,我希望用户能够邀请(授予访问权限)某些朋友来修改和编辑这些文档,类似于Google文档。
这是我目前解决这个问题的方法:
创建一个名为"组"的新关系模型,本质上是朋友的子集。文档属于用户,文档属于组。然后,用户可以邀请他们的朋友加入这些组关系,并且可以通过这些组访问/修改文档。
因此,用户有许多组,组属于许多用户。
我的问题:
- 有没有更好的方法来解决这个问题?
您可以考虑使用"成员资格"联接表。 所以:
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
可能有更多想法。