在Rails模型中获取远程IP地址

时间:2016-01-15 17:21:51

标签: ruby-on-rails

我正在尝试根据ActionDispatch::RemoteIp::GetIp#calculate_ip

执行以下操作
>> ActionDispatch::RemoteIp::GetIp.calculate_ip

但是,我看到了这个错误:

!! #<NoMethodError: undefined method `calculate_ip' for ActionDispatch::RemoteIp::GetIp:Class>

所以问题是,如果这种方法存在缺陷,我该如何在模型中获取远程IP?

2 个答案:

答案 0 :(得分:3)

将我的评论转换为答案:

IP地址仅在http请求的上下文中有意义。因此,您必须确定控制器中的IP地址,而不是模型中的IP地址。在测试或后台作业中使用模型时,IP地址是什么?

在控制器内部,您可以使用以下命令获取客户端的IP地址:

rand()

现在您可以将值分配给模型属性:

request.remote_ip

答案 1 :(得分:0)

最好在HTTP请求的上下文中确定IP地址,事实上Rails会为您执行此操作,并在任何实例化控制器中的request.remote_ip中提供结果。

class SomeController < ApplicationController
  def some_action
    remote_ip = request.remote_ip
    # You can now pass the ip anywhere you'd like to use it
  end
end