我正在尝试构建一个功能,您可以通过客户网址邀请您的朋友。我在我的用户模型中添加了一个列,这样当用户注册时,它会为他们提供一个唯一的令牌,在共享链接时会跟踪回来。
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。我该如何解决这个问题?
答案 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...