设置邀请朋友链接

时间:2011-12-01 22:42:21

标签: ruby-on-rails ruby-on-rails-3

我正在尝试构建一个功能,您可以通过客户网址邀请您的朋友。我在我的用户模型中添加了一个列,这样当用户注册时,它会为他们提供一个唯一的令牌,在共享链接时会跟踪回来。

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的列,我想记录用户是否通过某人的邀请链接注册。如果是这样,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列中。这似乎没有发生。我不认为referer_token的参数是通过表单传递的,因此可以存储引用者的ID。我该如何解决这个问题?

1 个答案:

答案 0 :(得分: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...