ユーザーが友達を招待できる機能を追加したいと思います。
誰かがリンクをクリックして登録した場合、その人が自動的に友達になるように、電子メールを生成する必要があります。
オプションが何であるかはわかりませんが、最初から構築する代わりに、いくつかのアイデアと戦略が必要でした。
ユーザーが友達を招待できる機能を追加したいと思います。
誰かがリンクをクリックして登録した場合、その人が自動的に友達になるように、電子メールを生成する必要があります。
オプションが何であるかはわかりませんが、最初から構築する代わりに、いくつかのアイデアと戦略が必要でした。
プロセス全体 (ユーザー >> メール >> サインアップ) を処理する 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
どちらの方法を選択するかは、今後何を追跡したいかによって異なります。
これをサポートするいくつかの宝石についてはわかりませんが、解決策はかなり簡単なはずです。フレンドシップモデルが必要だと思います。「waiting_for_approvment」のようなステータスを設定して、そのフレンドシップモデルIDを使用してメールリンクを送信できます。ユーザーがいずれかの方法を受け入れると、ステータスを「承認済み」または「拒否済み」に変更します。これも追跡する必要があります。
関係を定義することから始めます。
class User < ActiveRecord::Base
has_and_belongs_to_many :friends, :class_name => "User", :join_table => "friends_users"
end
つまり、実際には、ユーザーは別の名前で自分自身に関連しています。次に、次の線に沿って何かを使用できます。
@current_user.friends << @selected_user
コントローラで。