跟踪匿名用户

时间:2011-01-14 23:30:38

标签: ruby-on-rails

我有一个支持电子邮件订阅,调查和评论表单的应用程序。我有一个模型(分别是Subscription,SurveyResponse和Comment)。我还有一个访客模型来存储共享信息,如姓名,电子邮件,电话等。

我想知道如何最好地将模型结合在一起。使用每个模型与访客模型之间的一对一关联将分别处理每个事件。因此,如果John Doe提交了评论和调查,他将在访问者表中获得两条记录。我倾向于这种方法 - 它更简单。

另一方面,我可以在访问者上设置一对多关联,并对电子邮件设置唯一约束。然后,我可以尝试将每个事件绑定到已存在的记录,例如:

@visitor = Visitor.find_by_email(params[:email]) || Visitor.new(params)

这种方法似乎有问题,因为我无法确定我是否能获得正确的记录。如果两个不同的人使用“spam@example.com”提交评论怎么办?不太可能,但可能

有没有更好的方法来解决这个问题?

一些澄清:

  • 我不打算为常规网站访问者提供完整的用户帐户。

  • 验证非常少(新订阅会验证是否传递了电子邮件,评论需要在评论字段中显示文字,但大多数字段都是可选的)

2 个答案:

答案 0 :(得分:1)

如果您从未计划拥有完整的用户系统或验证电子邮件地址,那么您最好使用一对一关联。它基本上与将访问者模型的字段硬编码到每个其他表中相同,但减少了重复。如果您不在乎同一个电子邮件地址可能在您的网站上有不同的名称,电话号码等,那么请坚持使用。

如果您希望姓名,电话号码等始终是最新使用的,那么当他们提交内容时,请在访问者表格上进行更新。

为方便起见,您可以使用Cookie预先填写表单字段,但这并不妨碍某人在另一台计算机或浏览器上输入有冲突的信息。

答案 1 :(得分:0)

我的建议是在客户端存储一个具有随机/唯一ID的持久性cookie,并使用它来跟踪用户。

如果用户是已知用户(已登录),则可以将该ID以多对一关系链接到userId(因为用户可能从不同的计算机登录)。