Ruby on rails Ruby:如何将对象更改为可读的对象
我正在使用geocoder gem,它能够从http请求中提取IP地址。从文件中: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 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