16. Initial implementation
# get all administrative regions for country code
where(country: code, fcode: 'ADM1').order(:name)
# get all cities/villages country code and administrative region
where(country: code, admin1: adm.admin1, fclass: 'P')
.where.not(population: 0)
.order(:name)
29. Final implementation
psql project_dev_db
COPY countries TO
'/Users/irek/rails_workspace/battleriff/db/files/countries.csv'
DELIMITER E't' CSV HEADER;
COPY geo_names TO
'/Users/irek/rails_workspace/battleriff/db/files/geo_names.csv'
DELIMITER E't' CSV HEADER;
30. Final implementation
class AddGeoNamesTables <
ActiveRecord::Migration
def up
execute <<-SQL
create table geo_names (
geonameid int,
name varchar(200),
fclass char(1),
fcode varchar(10),
population bigint,
country varchar(2),
admin1 varchar(20)
);
create table countries (
iso_alpha2 char(2),
name varchar(200),
geonameid int
);
SQL
end
def down
drop_table :countries
drop_table :geo_names
end
end
31. Final implementation
namespace :geo_names do
desc "Setup ALL data needed for countries/states/cities selection"
task setup_all: :environment do
ActiveRecord::Base.connection.execute <<-SQL
copy countries (iso_alpha2,name,geonameid)
from '#{Rails.root.join('db', 'files', 'countries.csv').to_s}'
null as '' CSV DELIMITER 't' HEADER;
copy geo_names (geonameid,name,fclass,fcode,population,country, admin1)
from '#{Rails.root.join('db', 'files', 'geo_names.csv').to_s}'
null as '' CSV DELIMITER 't' HEADER;
SQL
end
end