【问题标题】:Sending Project Invites in Rails在 Rails 中发送项目邀请
【发布时间】:2010-11-30 19:48:46
【问题描述】:

大家好,我正在寻找一种向我的 Rails 应用程序添加邀请策略的方法。我正在使用 Devise 进行身份验证,并且喜欢 devise_invitable 的外观,但据我所知,该 gem 只允许您邀请新用户加入系统。

在我的应用中,用户可以邀请其他用户(使用电子邮件)加入他当前的项目。如果该电子邮件地址存在,则添加用户;如果该地址不存在,我想向该电子邮件地址发送特定于项目的邀请。如果用户已经有一个账户,她可以登录并将她的账户绑定到该项目。如果没有,她可以创建一个新帐户。

有人对在哪里寻找这样的系统有任何建议吗?

【问题讨论】:

    标签: ruby-on-rails authentication devise


    【解决方案1】:
    # app/models/invite.rb
    class Invitation < ActiveRecord::Base
      validates_uniqueness_of :email, :scope => :project_id
      belongs_to :project
      has_many :users
      after_save :email_invite_if_no_user
    
      private
        def email_invite_if_no_user
          unless User.find_by_email(email)
            UserMailer.send_invite(self).deliver
          end
        end
    end
    
    # config/routes.rb
    resources :projects do
      resources :invites
    end
    
    # app/controllers/invites_controller.rb
    class InvitesController < ActionController
      before_filter :get_project
    
      def new
        # render invite form
      end
    
      def create
        @invite = Invite.new(params[:invite])
        @invite.project_id = @project.id
        if @invite.save
          flash[:message] = "Successfully invited #{params[:invite][:email]}"
          redirect_to @project
        else
          flash[:error] = "Could not invite #{params[:invite][:email]}"
          render :new
        end
      end
    
      private
        def get_project
          @project = Project.find(params[:project_id])
        end 
    end
    

    【讨论】:

    • 绝对是一个好的起点?您将如何处理邀请接受部分?检查每次登录时是否有相同电子邮件的邀请?还是每次页面刷新?
    • @pastullo 我可能会创建一个InvitationsController#accept 方法来授权 current_user(如果存在邀请并且匹配电子邮件)访问项目,但是您的应用程序想要处理它(user_projects 表条目?) .
    • 怎么样:InvitesController#invite 检查用户是否已经注册。如果他是,它会创建一个成员来链接用户和组。如果他尚未注册,则会留下一封邀请,其中包含他的电子邮件和待处理的组。一旦该电子邮件注册,使用 after_create 过滤器,您就创建了会员资格?
    【解决方案2】:

    我已经在我的应用程序中实现了类似行的功能。简单介绍一下

    在我的应用程序中,我们有关注取消关注功能,用户可以通过 gmail、yahoo 和 facebook 邀请他的联系人,并在文本区域输入电子邮件。

    如果电子邮件有效 - 没有发送邀请的复选框(该电子邮件前面的电子邮件无效)
    如果电子邮件有效且没有用户使用该电子邮件进行注册 - 显示复选框以邀请
    如果电子邮件有效且已注册用户 - 显示关注取消关注按钮

    我使用 contacts gem 从 gmail 和 yahoo 获取联系人。

    其余的编码你必须自己做,我不认为有任何可用的 gem。

    【讨论】:

      猜你喜欢
      • 2014-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多