我刚刚将Geocoder gem添加到我的应用中。一切都很完美,但我想知道我是否可以进一步使用宝石。
我的应用程序有用户,他们可以添加文章。目前我可以使用
来获取他们的IP地址 @article.ip_address = request.remote_ip
我找了一个宝石,它可以帮助我将该IP地址转换为国名,但我找不到任何东西。由于我使用地理编码器,我意识到在他们的网站上他们自动检测我的IP,城市和国家。我想知道如何将其实现给我的控制器。
def create
@article = Breeder.new(params[:breeder])
@article.user = current_user
@article.ip_address = request.remote_ip
respond_to do |format|
if @article.save
format.html { redirect_to @article, notice: 'Article was successfully created.' }
format.json { render json: @article, status: :created, location: @article }
else
format.html { render action: "new" }
format.json { render json: @article.errors, status: :unprocessable_entity }
end
end
端
这个想法是检测不是来自英国的文章。
答案 0 :(得分:4)
您可以使用geoip gem。
从http://www.maxmind.com/app/geolitecountry下载GeoIP.dat.gz。解压缩文件。以下假设在#{RAILS_ROOT} / db dir。
下@geoip ||= GeoIP.new("#{RAILS_ROOT}/db/GeoIP.dat")
remote_ip = request.remote_ip
if remote_ip != "127.0.0.1" #todo: check for other local addresses or set default value
location_location = @geoip.country(remote_ip)
if location_location != nil
@model.country = location_location[2]
end
end
答案 1 :(得分:0)
也许GeoIP可以替代你:
https://github.com/cjheath/geoip
非常简单。我对地理编码器没有那么自信,但如果你definitfly想要使用它,你可能会看到处理它的railscast。
http://railscasts.com/episodes/273-geocoder
Rails编码女人,真该死!^^
答案 2 :(得分:0)
是的,您可以使用Geocoder对IP地址进行地理编码。 Geocoder会为Request添加一个位置方法,所以你只需要:
sender_ip = request.remote_ip
sender_country = request.location.country
sender_city = request.location.city
这对我有用。希望它有所帮助。