我正在开发系统事件跟踪功能,用于记录登录、注销、未经授权的访问、错误密码、发布的内容等事件。我希望捕获请求数据,例如 remote_ip、会话 ID、请求类型等。
我了解理想情况下,您不应访问模型中的请求数据,而应将其传递给控制器,如下所示:
文章#编辑:
@article.update_attributes(params[:article])
Event.create(:eventable => @article, :request => request)
但是,通常会在 rake 任务甚至控制台中创建事件,因此我想将此代码从控制器中取出并放入模型中,如下所示:
class Article
after_save :create_event
def create_event
Event.create(:message => "aritcle_updated")
end
end
然后在 Event 类中:
class Event
before_create :record_ip_address
def record_ip_address
# This is how I want it, I don't know how to access request here!
self.ip = request.remote_ip # How to access request?
end
end
实现这一目标的最佳方法是什么,以及如何访问模型中的 Request 对象?
请注意,事件模型不需要存在请求 - 我只希望它在可用时处理它