5

我正在为我的 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=部分。

任何帮助是极大的赞赏。谢谢!

4

1 回答 1

11

要回答 cookie 问题,设置它们很容易:

cookies['app-referrer-id'] = params[:r]

然后以相同的格式读回它们(但没有分配)。我建议将此代码放在应用程序控制器的 before_filter 中。这样,无论您的访问者首先登陆您网站的哪个页面,都将设置 cookie。

关于将 url 的结构更改为建议的格式,您需要让推荐代码匹配特定的模式,否则您可能会遇到路由问题。例如,如果它们匹配 3 个字母后跟三个数字的格式,您可以在您的路由文件中添加以下内容:

match '/:referrer_id' => 'app#index', :constraints => {:referrer_id => /[a-zA-Z]{3}[0-9]{3}/}

对 app#index 的引用应更改为您处理引用的控制器,您可以通过 params[:referrer_id] 访问referrer_id。

希望这有点用。

罗宾

于 2011-03-17T08:45:39.667 回答