您可能会考虑使用“Membership”连接表。所以:
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
可能有更多的想法。