Fork me on GitHub
Hoopla! - now with extra whiz-bang home

Earlier I posted a list of all US zipcodes by city and state. I needed it for one of my sites and now I'm finding it handy for another. Instead of having people fill City, State, and Zip individually (with a high probability that the data won't be standardized enough to do comparisons between records), you can simply accept a zip code from them and populate the rest yourself.

I create a Zip model that has the following three fields: code, city, state. I import the data into it like so (dependant on mysql):


class CreateZips < ActiveRecord::Migration
  def self.up
    create_table :zips do |t|
      t.column  :city,      :string
      t.column  :state,     :string
    end
    # load the zipcodes from a csv file
    execute "load data infile '#{RAILS_ROOT}/db/migrate/zips.csv' into table zips fields terminated by ',' lines terminated by '\n'"
  end

  def self.down
    drop_table :zips
  end
end
And I make sure my zips.csv file can be found in the ./db/migrate folder. To associate this model with others, just add a `belongs_to :zip` and make sure that you've got a `zip_id` in the table schema. If you use the above migration the zipcode will be set as the table id and you can manually set zip_id to whatever zip code you want - handy for writing fixtures! Now in my forms I only need to have a 5-char field that asks for a zipcode and (using lovely, lovely AJAX) displays the corresponding city and state automatically.
blog comments powered by Disqus