Я использую гем ruoc geocoder для поиска по местоположению. Я хочу ограничить поиск мест, которые были официально запущены. Если кто-то ищет по почтовому индексу, это легко с помощью регулярных выражений. Но если кто-то выполняет поиск по городу, мне нужно преобразовать город в почтовый индекс, проверить мою почтовую таблицу и, если она положительная, вернуть результаты поиска.
Геокодер 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