2011-11-08 8 views
2

私はdeviseを使用するレールアプリを持っています。私は知りたいのですが、Userテーブルで、新しいユーザがどこに来たのか、HTTPリファラをどうにかして追跡できるのでしょうか?新しいユーザーが参照された場所を保存する方法は? Rails + Deviseの使用

私は、Facebook、Twitter、LinkedIn、Google +から来たものを知りたいので、ウイルスループを追跡することができます。

アイデア?誰か見ましたか?可能?これはレールアプリにどこに住んでいますか?まだ非常に新しい。ありがとう

+0

いつですか?彼がウェブサイトに上陸して登録したとき、または訪問したとき? –

+0

いつでも新しいUser.recordが作成されます –

+0

request.env ["HTTP_REFERER"]はローカルでは使用できませんか? –

答えて

3

このようにすることができます。アプリケーションコントローラのフィルタの前にしてください いくつかの調整と固定が必要な場合がありますが、あなたはアイデアを得るでしょう、あなたがあれば、

def landing_filter 
    if from_other_site(request.referrer) and !session[:referer].blank? 
     session[:referer] = request.referrer #you don't want to delete first entrance 
    end 
end 

from_other_siteは、参照元URLにドメイン名を確認します方法でなければなりません任意のアクションのためにそれを呼び出しますそれは/登録/ new.erb.htmlビューは、フォームの隠しフィールド

<%= f.hidden_field :referrer, session[:reserrer] %> 

に追加するには、その後工夫でそれ以外の場合は、falsetrue

を返すと一致してすることを忘れないでくださいユーザの新しいデータベースフィールドを使用したDDLの移行

+0

ありがとう、しかし、なぜ参照元がlocalhost上に表示されないのでしょうか?何かがローカルで参照を無効にしていますか? –

+0

ブラウザにURLを入力するか、ブラウザのブックマークメニューなどから最初にページを開く場合を除き、ブラウザは常にリファラーを送信する必要があります。この例の動作を確認するには、http:// localhost:3000/your_controller/action'というURLでFacebookに投稿し、ログまたはデバッガのreferrer urlをチェックしてください。リンクをクリックしたfacebook page urlと同じにしてください –

+0

他のサイトメソッドから実装する方法を知っていますか? – Tony

0

ユーザのコピー情報をユーザテーブルに作成した後にリファラーを保存します。セッションを使用してリフェラルを保存するが、永続的なクッキーが良い。 Cookieは、ユーザーがブラウザを閉じても翌日に再び表示されても情報を保持できます。代わりに、あなたはまた、自動保存にオブジェクトが作成されるたびに処理するためにrails sweepers/observersを使用することができますすべてのアクションを変更する

# so basically in ApplicationContreller using before_filter 
def referer_before_filter 
    if cookies[:referer].blank? 
    cookies.permanent[:referer] = request.env["HTTP_REFERER"] || 'none' 
    end 
end 

# and in signup action somewhere else saving that information 
@user.referer = cookies[:referer] # or maybe to some other table 

リファラーとその他の必要な情報を自動的に保存するには良い宝石は https://github.com/holli/referer_trackingです。情報を手動で保存するか、掃除機を使用して自動的に保存するかを選択できます。