Ruby Geocoder gem找到邮政编码

我正在使用ruby geocoder gem按位置搜索。 我想将搜索限制在已正式启动的位置。 如果有人通过zip搜索,使用正则表达式很容易。 但如果有人按城市搜索,我需要将城市转换为邮政编码,检查我的邮政编码表,如果是肯定的,则返回搜索结果。

地理编码器api有一个反向地理编码部分:

reverse_geocoded_by :latitude, :longitude do |obj,results| if geo = results.first obj.city = geo.city obj.zipcode = geo.postal_code obj.country = geo.country_code end end after_validation :reverse_geocode 

这显然是为了在模型中使用而构建的。 但我试图在我的控制器中使用它,但是obj.zipcode根本不起作用。 Geocoder.search(’san jose,ca’)似乎回归了我所需要的,我只是不知道如何去做。 这是我在的地方:

  if params[:search].present? # coords = Geocoder.coordinates(params[:search]) zip = Geocoder.search(params[:search]) if Zip.where(:zip => (params[zip.zipcode]), :launch => true).exists? addresses = Address.near(params[:search], 25, :order => :distance) @profiles = addresses.map{ |ad| ad.profile }.uniq unless addresses.nil? @title = "Addresses Near " + (params[:search]).to_s else if Zip.where(:zip => (params[zip.zipcode]), :nearlaunch => true).exists? addresses = Address.near(params[:search], 25, :order => :distance) @profiles = addresses.map{ |ad| ad.profile }.uniq unless addresses.nil? @title = "We have not launched for your location but these are near by " + (params[:search]).to_s else redirect_to :controller => 'pages', :action => 'notlaunched' end end 

试试区域gem 。 你可以这样做:

 "San Jose, CA".to_zip #=> ["95101", "95102", ... 

您可以使用这样来获取任何纬度和经度的邮政编码

 Geocoder.search([latitude, longitude]).first.postal_code 

这可以在控制器或模型以外的任何文件中使用。 但是地理编码器还提供自动转换,提供的表应该具有所需的列名。 有关更多信息,请访问此处地理编码器