我有Group
模型,其中包含许多成员(User
模型)。
class Group < ActiveRecord::Base
belongs_to :owner, :class_name => 'User'
has_many :members, :through => :group_members, :class_name => 'User'
end
User
模型正在使用Devise。我需要为用户(组所有者)添加“邀请”另一个用户(可能有或可能没有用户记录)属于该组的能力。我该怎么做呢?这样的东西是否已经构建并打包为Gem?
答案 0 :(得分:3)
好吧,第一个动作是找到用户,然后将他添加到他存在的组中。如果他不存在,请执行诸如通过电子邮件发送邀请并将该邀请放入也属于该组的单独表格中。 然后,如果有相同电子邮件地址的人注册,请将新用户直接放入该组。总计:添加一个名为“invite_user”的新模型,该模型只有一个电子邮件地址行,属于组模型。
class InvitedUser < ActiveRecord:Base
belongs_to :group
end
创建一个这样的邀请操作:
def invite_user
user = User.find_by_email(params[:email])
group = Group.find(params[:id])
if user
group.users << user
else
send_invite user.email
group.invited_users << user
end
end
最后你需要继承Devise的注册控制器,这样你就可以在注册成功后覆盖/添加默认操作。但是,这部分可能不可靠,因为我部分依赖于Devise的文档并且没有自己尝试:
class RegistrationsController < Devise::RegistrationsController
protected
def def after_sign_up_path_for(resource)
invited_user = InvitedUser.find_by_email(resource.email)
if invited_user
invited_user.group.users << resource
invited_user.destroy
end
after_sign_in_path_for(resource)
end
end
或类似的东西。而且你仍然需要实现send_invite操作,当然