现有应用程序中许多模型的IP地址记录

时间:2009-01-25 21:37:36

标签: ruby-on-rails logging ip-address

我有一个拥有许多模型的现有应用。我想记录创建它们的用户的IP地址,其主要目的是帮助清除垃圾邮件发送者或其他滥用用户(如果我不知道他们使用的是什么IP地址,我可以阻止它。我需要随着时间的推移跟踪这些,因为用户可以从家里,办公室,他们的电话等访问,我想看看使用模式。绘制用户访问的位置或其他内容也可能很有趣,但目前任何副作用都是纯粹的思想。

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

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

  1. 为每个模型添加IP地址属性,并在
  2. 中传递
  3. 使用观察者或after_save回调调用的某种Logger模型
  4. 思考?还有更好的方法吗?插件这样做?谢谢!

3 个答案:

答案 0 :(得分:2)

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

优点:

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

缺点:

  • 如何在不修改每个Model.create的情况下获取IP地址?我必须打破我愿意做的MVC理论,但我真的不知道如何

答案 1 :(得分:2)

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

答案 2 :(得分:1)

为每个模型添加IP地址属性,并在

中传递

优点:

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

缺点:

  • 要求我触摸/重新编码每个型号和&每个Model.create(它使用Model.create params [:model]的rails惯用法,所以我只是在request.address上添加)。这是一项很多工作。很多测试都必须重写
  • 如果我转移到IPv6,这将失败(如果模型期望IPv4 addys)