Есть ли какой-нибудь плагин или гем, который может помочь мне сделать возможность "пригласить друга" в рельсах? - PullRequest
3 голосов
/ 07 января 2011

Я хочу добавить возможность пользователям приглашать друзей.

Электронное письмо должно быть создано таким образом, чтобы, если кто-то нажимает на ссылку и регистрируется, этот человек автоматически становится другом.

Не уверен, каковы варианты, но хотел некоторые идеи и стратегии в качестве альтернативы его созданию с нуля.

Ответы [ 4 ]

2 голосов
/ 19 марта 2011

Мне не известны какие-либо драгоценные камни, которые обрабатывают весь процесс (пользователь >> электронная почта >> регистрация).Если вы просто хотите создать взаимосвязь, когда пользователь приходит по определенной ссылке, создайте специальный маршрут приглашения (отдельный контроллер не нужен, но просто чтобы прояснить это):

# 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 голос
/ 19 марта 2011

Я не знаю драгоценного камня для рельсов. Но есть расширение для Spree, проекта электронной коммерции на основе рельсов. Проверьте это, и, вероятно, вы сможете узнать, как это реализовано.

https://github.com/spree/spree_email_to_friend

0 голосов
/ 23 марта 2011

Начните с определения отношения:

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

Так что на самом деле, Пользователь относится к себе с другим именем Тогда вы можете использовать что-то вроде:

@current_user.friends << @selected_user

в вашем контроллере.

0 голосов
/ 18 марта 2011

Я не знаю, какой-нибудь драгоценный камень, чтобы поддержать это, но решение должно быть довольно тривиальным. Полагаю, вам нужна модель Дружбы, вы можете указать в ней какой-нибудь статус, например, «wait_for_approvment», и отправить по почте ссылку с идентификатором модели Дружбы. Когда пользователь принимает тот или иной способ, вы просто меняете статус на «одобренный» или даже «отклоненный», если вы тоже хотите это отслеживать.

...