3

我有一个现有的应用程序,它有很多很多模型。我想记录创建它们的用户的 IP 地址,其主要目的是帮助清除垃圾邮件发送者或其他滥用行为的用户(如果我不知道他们使用的 IP 地址,我可以不要阻止它)。我需要随着时间的推移跟踪这些,因为用户可能会从家里、办公室、他们的手机等处访问,我想查看使用模式。标出用户从哪里访问或其他东西也可能很有趣,但目前任何副作用都纯粹是想法。

我们使用基于 cookie 的方法来存储用户会话。

我可以想到两种方法(我会将它们创建为回复,以便人们可以投票):

  1. 为每个模型添加 IP 地址属性,并将其传入
  2. 使用观察者或 after_save 回调调用的某种 Logger 模型

想法?有没有更好的方法?这样做的插件?谢谢!!

4

3 回答 3

2

使用观察者或 after_save 回调调用的某种 Logger 模型

优点:

  • 可以通过观察者完成,因此模型甚至不需要知道
  • 所有日志记录都发生在一个模型/数据库表中,因此以后可以轻松查询和运行报告

缺点:

  • 在不修改每个 Model.create 来传递它的情况下,我怎么能得到 IP 地址?我必须打破 MVC 理论,我愿意这样做,但我真的不知道怎么做
于 2009-01-25T21:40:31.977 回答
2

我会为此使用多态关联,然后您可以将其应用于所有需要跟踪的模型。这样可以最大限度地减少向每个模型添加 IP 地址列的麻烦,并显着减少代码库中的重复数量。然后走观察者路线可能是连接模型的最简单方法。

于 2009-01-26T00:34:21.970 回答
1

为每个模型添加 IP 地址属性,并将其传入

优点:

  • 概念上很简单。有一个属性,我可以很容易地看到发布 123 是由用户 222 w/IP 123.123.123.123 上传的

缺点:

  • 要求我触摸/重新编码每个模型和每个 Model.create(它使用 Model.create params[:model] 的 rails 习惯用法,所以我只需添加 request.address)。这是很多工作。许多测试将不得不重新编写
  • 如果我曾经迁移到 IPv6,这将失败(如果模型期望 IPv4 addys)
于 2009-01-25T21:39:03.213 回答