2011-12-01 85 views
0

我想建立一個功能,你可以邀請你的朋友與客戶的網址。我在我的用戶模型中添加了一個列,這樣當用戶註冊時,它將爲他們提供一個唯一的令牌,當鏈接被共享時會跟蹤他們。設置一個邀請朋友鏈接

User.rb:

def set_referer_url 
    begin 
    self.referer_url = rand(36**8).to_s(36) 
    end while User.exists?(:referer_url => self.referer_url) 
end 

我然後建立一個郵件將發送好友邀請與以下網址:

www.nameofsite.com/r/[referer_url]

我已經設置了路線如下:

match '/r/:referer_token' => 'users#new' 

我在用戶模型中有一個名爲referer的列,我想記錄用戶是否通過某人的邀請鏈接註冊過。如果是這樣,那麼引用者列應該指定引用他們的人的用戶ID。

我對sign_up觀點如下:

<%= form_for @user, :as => :user, :url => {:controller => "users", :action => "create" } do |f| %> 
    <%= f.hidden_field :referer_token %> 

    <p> 
    <%= f.label :email %><br /> 
    <%= f.text_field :email %> 
    ... 

在我的用戶模型中,我有以下嘗試引薦ID分配給新用戶:

def referer_token 
    User.referer_url if user 
end 

def referer_token=(token) 
    self.referer = User.find_by_referer_url(token).id 
end 

attr_accessible :email, :password, :password_confirmation, :referer_token 

我認爲這會通過URL找到引用者的ID,並將其設置在列新用戶的推薦人。這似乎沒有發生。我不認爲referer_token的參數正通過表單傳遞,以便可以存儲引用者的ID。我怎樣才能解決這個問題?

+0

我是有點困惑,爲什麼你在setter中使用'referer_url'屬性名稱,但是'attr_accessible'列表中有'referer_token'。此外,您是否嘗試過使用Firebug或Chrome內置的「檢查元素」工具查看隱藏字段? – iwasrobbed

+0

Alex

+0

雖然引用令牌似乎並未提交。一旦提交表格,我無法判斷我是否沒有正確接受。 – Alex

回答

1

你接近,但我可能會做控制器的關聯和定義模型的關聯:

# models/user 
class User < ActiveRecord::Base 
    belongs_to :referrer, :class_name => 'User' 
    # you'll need a referrer_id on your users table 
end 

# views/users/new 
<%= form_for(@user) do |f| %> 
    <%= hidden_field_tag :referrer_token, params[:referrer_token] %> 
    ... 

# controllers/users_controller 
class UsersController < ApplicationController 
    @user = User.new(params[:user]) 
    @user.referrer = User.find_by_referrer_url(params[:referrer_token]) 
    @user.save 
end 

然後,你可以這樣做:

@user.referrer => #<User id: 114...