Ruby on Rails:设计:如何添加“邀请用户属于模型”?

时间:2011-09-10 18:27:07

标签: ruby-on-rails devise

我有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?

1 个答案:

答案 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操作,当然