Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Ruby:如何将对象更改为可读的对象_Ruby On Rails_Ruby_Rails Geocoder - Fatal编程技术网

Ruby on rails Ruby:如何将对象更改为可读的对象

Ruby on rails Ruby:如何将对象更改为可读的对象,ruby-on-rails,ruby,rails-geocoder,Ruby On Rails,Ruby,Rails Geocoder,我正在使用geocoder gem,它能够从http请求中提取IP地址。从文件中: Geocoder adds a +location+ method to the standard <tt>Rack::Request</tt> object so you can easily look up the location of any HTTP request by IP address. For example, in a Rails controller or a Si

我正在使用geocoder gem,它能够从http请求中提取IP地址。从文件中:

Geocoder adds a +location+ method to the standard <tt>Rack::Request</tt> object so you can easily look up the location of any HTTP request by IP address. For example, in a Rails controller or a Sinatra app:

 # returns Geocoder::Result object
  result = request.location
在我的控制器中,然后在我的视图中

<%= @result %>

然而,我得到了这个

#<Geocoder::Result::Freegeoip:0x00000102dc7758>
#
然后我试着

<%= @result.to_s %>

但这并没有改变任何事情


有什么想法吗

如果您只需要一个IP地址,那么您可以从请求头中获取该地址。由于欺骗,它可能不完全准确,但通过快速查看一些头值,我发现远程地址包含我的头值。把这个放在控制器里。如果其他人可以推荐其他或更好的价值观使用,请让我们知道

request.headers['REMOTE_ADDR']

我实际上试着检查HTTP_X_FORWARDED_for,但它不存在于头文件中。也许webrick没有使用它。

要获取客户端的IP,请使用
request.IP
。这是获取IP的更为正确的方法,尤其是当您的用户在代理后时。因此,它很简单:

 request.ip
其来源如下:

 # File lib/rack/request.rb, line 256
 def ip
   if addr = @env['HTTP_X_FORWARDED_FOR']
     (addr.split(',').grep(/\d\./).first || @env['REMOTE_ADDR']).to_s.strip
   else
     @env['REMOTE_ADDR']
   end
 end

有各种各样的方法,你可以尝试使用它们。谢谢,但是ip地址不是这些方法之一,这不是很奇怪吗?address方法似乎是一个物理地址。
request.ip
,至少他们是这么说的注意:这并不是那么简单!更简单!:)检查我的答案!
 # File lib/rack/request.rb, line 256
 def ip
   if addr = @env['HTTP_X_FORWARDED_FOR']
     (addr.split(',').grep(/\d\./).first || @env['REMOTE_ADDR']).to_s.strip
   else
     @env['REMOTE_ADDR']
   end
 end