我正在为我的Ruby on Rails应用程序构建推荐程序,以便用户可以共享包含其用户ID(app.com/?r=ID)的链接。如果访问者登陆应用的主页时存在推荐人ID,则主页上的注册表单包含一个隐藏字段,该字段填充了引荐者的ID。然后,如果被推荐的访客注册,则控制器检测ID并在推荐表中创建新的推荐。它有效,而且这是一大堆代码:
@referrer = User.find(params[:r]) rescue nil
unless @referrer.nil?
@referral = Referral.new(:referrer_id=>@referrer.id)
end
非常简单的东西,但它很容易破解(例如:如果访问者离开主页,引用者ID就会丢失)。我觉得cookie可能是一种更健壮的方法,其中包含引用者ID的cookie存储在被推荐用户的计算机上x天。这是非常普遍的,特别是对于像Groupon这样的联盟计划,但我从未使用过cookie,也不知道从哪里开始。
此外,有没有什么好的方法来掩盖或更改推荐系统的URL?我不喜欢 app.com/?r=1842 ,而是喜欢 app.com/x39f3 < - 与给定用户关联的随机生成的数字序列,没有?r = 部分。
非常感谢任何帮助。谢谢!
答案 0 :(得分:11)
要回答cookie问题,可以很容易地设置它们:
cookies['app-referrer-id'] = params[:r]
然后它的格式相同(但没有分配)。我建议将此代码放在应用程序控制器的before_filter中。这样,无论访问者首次登陆您网站的页面如何,都会设置Cookie。
关于将网址结构更改为建议的格式,您需要使引荐代码与特定模式匹配,否则您可能会遇到路由问题。例如,如果它们匹配3个字母后跟三个数字的格式,您可以将以下路线文件放在:
match '/:referrer_id' => 'app#index', :constraints => {:referrer_id => /[a-zA-Z]{3}[0-9]{3}/}
对app#index的引用应更改为处理引用的控制器,您可以通过params [:referrer_id]访问referrer_id。
希望这有一些用处。
罗宾