3

ユーザーが友達を招待できる機能を追加したいと思います。

誰かがリンクをクリックして登録した場合、その人が自動的に友達になるように、電子メールを生成する必要があります。

オプションが何であるかはわかりませんが、最初から構築する代わりに、いくつかのアイデアと戦略が必要でした。

4

4 に答える 4

2

プロセス全体 (ユーザー >> メール >> サインアップ) を処理する gem を知りません。ユーザーが特定のリンクから来たときに関係を作成するだけの場合は、特別な招待ルートを作成します (別のコントローラーは必要ありませんが、明確にするためです)。

# 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

どちらの方法を選択するかは、今後何を追跡したいかによって異なります。

于 2011-03-19T07:43:44.653 に答える
0

これをサポートするいくつかの宝石についてはわかりませんが、解決策はかなり簡単なはずです。フレンドシップモデルが必要だと思います。「waiting_for_approvment」のようなステータスを設定して、そのフレンドシップモデルIDを使用してメールリンクを送信できます。ユーザーがいずれかの方法を受け入れると、ステータスを「承認済み」または「拒否済み」に変更します。これも追跡する必要があります。

于 2011-03-18T13:19:23.933 に答える
0

関係を定義することから始めます。

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

つまり、実際には、ユーザーは別の名前で自分自身に関連しています。次に、次の線に沿って何かを使用できます。

@current_user.friends << @selected_user

コントローラで。

于 2011-03-23T12:50:43.440 に答える