Skip to main content

Using Geocoder to get street name,state,city,country etc in Your Rails app

Recently i implemented Google map for one of the module where User will enter his location/address and other relevant geo-details should get autopopulated.Well,This was posible because of  Geocoder and by using it you can get every small details such as postalcode,country code,zipcode,street name,state name,state code,latitude,longitude(and more) ready in your hands easily.Its really awesome.
I have used to it get all relevant information about the location that the user enter using Geocomplete,another awesome autocomplete library to get locations.

Suppose you have a users table and also few columns such as longitude,latitude,state,postal code,street name,address,country  and want to autopopulate other fields just by using address entered by the user then you are reading the right blog,So its easy,let me show you how.


  1. User will enter address using Geocomplete and store that address in address column in users/locations table
  2. Then,use Geocoder to fetch other geo informations and update other columns using address.

Here it goes................



================users/locations table,here i will use the allow the user to fill in the address using Geocomplete and then use it to get other details using Geocoder

class CreateLocations < ActiveRecord::Migration
  def change
    create_table :places do |t|
      t.string :address
      t.float :latitude
      t.float :longitude
      t.string :address
      t.string :country
      t.string :state
      t.string :city
      t.string :pincode
      t.timestamps
    end
    add_index :places, :address
  end
end

==================Geocode to autopopulate using address in users/location model

##i want to use the address column to autopopulate others columns
geocoded_by :address
##also i want to use the latitude.longitude to fetch all others informations and then save in relevant ##feilds
reverse_geocoded_by :latitude, :longitude do |obj,results|
  if geo = results.first
    obj.state    = geo.state
    obj.city    = geo.city
    obj.pincode = geo.postal_code
    obj.country = geo.country
  end
end
##change/update/validate address only if address changed to improved performance else every time it ##will keep updating
after_validation :geocode, :reverse_geocode ,:if => :address_changed?

.
So,as you can see,how easy it is to get every geo informations using Geocoder.There are also many other uses of Geocoder which is  out of the scope of this blog and can be found out here.Hope you get to learn something new,




Comments

Popular posts from this blog

Access files on AWS S3 bucket using aws-sdk-s3 with Rails 6

This is a quick post to share few easy methods to access files on AWS S3. The below custom utility methods uses  aws-sdk-s3 Firstly lets define a constant to access files on S3 -  ##to manage S3 Resources S3 = Aws::S3::Resource.new( region: "YOUR-REGION", access_key_id: "YOUR-AWS-KEY", secret_access_key: "YOUR-AWS-SECRET") ##to query S3 S3_client = Aws::S3::Client.new( access_key_id: configatron.aws.s3.credentials.access_key_id, secret_access_key: configatron.aws.s3.credentials.secret_access_key, region: configatron.aws.s3.region ) Now, lets use the S3 OBJECT to access files in different ways -  1. Get all files in a S3 FOLDER     ##this gives a array of file paths present in the folder specified by prefix attribute          s3objects = S3.bucket("my-output-bucket").objects({prefix: "/inputs/any-random-user-folder"}).collect(&:key) ##you can also delete the file if found ...

Setting Axios to put/post dynamically

 Let me avoid wasting more time and quickly jump on the problem statement. What is the problem statement -  - I want to use the same React component both for Create/Update. How I achieved it -  - Firstly for new object, it worked smoothly and I wanted to reuse the same component again for edit/update too. - I sent the existing values as props and saved them into the corresponding states. - I reused the existing method ( axios server call ) so that it dynamically POST/PUT as needed.This is show below -         //this method calls post/put dynamically - simple code here..no rocket science methodCall = () => { const { Id, editable, details } = this.state; //check if new or existing record if (editable) { return API.put(`/post/${Id}`, details); } else { return API.post("/post", details); } }; //call this method onClick/onSubmit - as you want to handleSubmit = (event) => { event.preventDefault(); ...

So easy to install ruby on rails on ubuntu 12.04/centos 6 and start development

Its easy to start development on ubuntu/centos using vmware and start development.i will start the code on certain assumptions : you know ruby on rails you are aware of how to make use of google(in case u are stuck and want to explore more without spoon feeding) LAST BUT NOT LEAST---you love coding short preview of sequence you need to follow:  START -> get vmware -> get ubuntu/centos -> get rvm -> get ruby -> get rails----END--THAT'S IT Lets start and finish this quickly using below mentioned steps: install vmware player if you are using windows/mcintosh from https://my.vmware.com/web/vmware/downloads  NOW.vmware player need image file of the operating system you want,so hit the url and get centos at http://vault.centos.org/6.2/isos/ OR ubuntu at http://www.ubuntu.com/download/desktop ONCE both vmware player and ubuntu/centos are downloaded,follow the steps to first install vmware(very simple) and mounting ubu...