是否有插件或gem可以帮助我在rails中“邀请朋友”功能?

时间:2011-01-07 01:46:01

标签: ruby-on-rails email invite

我想添加用户邀请朋友的功能。

应该生成电子邮件,以便在有人点击链接并注册时,该人自动成为朋友。

不确定选项是什么,但想要一些想法和策略作为从头开始构建它的替代方案。

4 个答案:

答案 0 :(得分:2)

我不知道处理整个过程的任何宝石(用户>>电子邮件>>注册)。如果您只是希望在用户来自特定链接时创建关系,请创建一个特殊的邀请路由(单独的控制器不是必需的,只是为了清楚):

# routes.rb
match '/invite/:friend_id' => 'public#invite', :as => :invite

# PublicController
def invite
  session[:referring_friend] = params[:friend_id]
  redirect_to root_path
end

# UsersController
def create
  @user = User.new(params[:user])
  if @user.save
    @user.create_friendship(session[:referring_friend]) if session[:referring_friend]
    ...
  else
    ...
  end
end

如果您想跟踪转化指标,我建议您创建一个链接模型并使用它来跟踪点击和注册:

class Link < ActiveRecord::Base

  belongs_to :user
  attr_accessible :user, :user_id, :clicks, :conversions

  def click!
    self.class.increment_count(:clicks, self.id)
  end

  def convert!
    self.class.increment_count(:conversions, self.id)
  end

end

# routes.rb
match '/invite/:link_id' => 'links#hit', :as => :invite

# LinksController
def hit
  link = Link.find(params[:link_id])
  link.click!
  session[:referring_link_id] = link.id
  redirect_to root_path # or whatever path (maybe provided by link...)
end

# UsersController
def create
  @user = User.new(params[:user])
  if @user.save
    if session[:referring_link_id]
      link = Link.find(session[:referring_link_id])
      link.convert!
      @user.create_friendship(link.user_id)
    end
    ...
  else
    ...
  end
end

您选择哪种方法取决于您想要追踪的目标。

答案 1 :(得分:1)

我不知道宝石的轨道。但Spree是一个基于轨道的电子商务项目的扩展。看看&amp;可能你可以参考它是如何实现的。

https://github.com/spree/spree_email_to_friend

答案 2 :(得分:0)

我不知道有些宝石可以支持这一点,但解决方案应该是微不足道的。我猜您需要友谊模型,您可以在其中放置一些状态,如'waiting_for_approvment',并使用该友谊模型ID发送邮件链接。当用户接受任何一种方式时,您只需将状态更改为“已批准”或甚至“拒绝”,如果您也想跟踪它。

答案 3 :(得分:0)

首先定义关系:

class User < ActiveRecord::Base
 has_and_belongs_to_many :friends, :class_name => "User", :join_table => "friends_users"
end

所以,用户与自己的名字不同。然后你可以使用以下内容:

@current_user.friends << @selected_user

在您的控制器中。