如何重载或monkeypatch Request.remote_ip或Request.ip?

时间:2012-03-06 16:38:40

标签: ruby-on-rails ruby ruby-on-rails-3 monkeypatching

我需要修补或重载Request.remote_ip(或者Request.ip会更好,因为我看到有人提到应该使用它而不是remote_ip),这样它就可以正常运行,但如果CF-Connecting-IP在标题,它将返回此IP地址而不是它通常检测到的IP地址。

如何根据类和方法定义适当设置此修补程序?

基本上我只想为每个请求返回以下内容:

headers["CF-Connecting-IP"] || remote_ip

1 个答案:

答案 0 :(得分:1)

我不会根据请求修补方法。相反,我会在你的应用程序控制器中创建一个辅助方法,它完全按照你刚发布的方式执行:

class ApplicationController < ActionController::Base
  ...

  def connecting_ip
    headers["CF-Connecting-IP"] || request.remote_ip
  end
end

只需在任何重要的地方使用connecting_ip。