确定可由多个用户编辑的文档模型的关系

时间:2012-04-07 19:39:52

标签: ruby-on-rails ruby-on-rails-3 associations

我正在试图弄清楚如何为我的rails项目设置Document模型的关系/关联。我有一个用户模型,用户可以互相交友(友谊模型)。

现在,我希望用户能够邀请(允许访问)某些朋友来修改和编辑这些类似于Google文档的文档。

这是我目前解决这个问题的方法:

创建一个名为“group”的新关系模型,基本上是朋友的一个子集。文档属于用户,文档属于组。然后,用户可以邀请他们的朋友加入这些组关系,并且可以通过这些组访问/修改文档。

因此,用户有很多组,组属于很多用户。

我的问题:

  1. 有没有更好的方法解决这个问题?

1 个答案:

答案 0 :(得分: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

可能会有更多想法。