Migration of existant data



I’m actually coding an application which use data from an other one.
(Zone > Region > Country > Location exactly) which are not in the best
form. There are primary keys defined on the names of the zone / region /
… and link between tables with foreign keys using the primary keys of
the parrent table (logical)

I must use this data but I must use the Rails format in the database
(foreign keys on id)
I can’t modify the other database / application.

Do you have an idea how to realize that ?

PS: sorry for my poor english :s


It is not clear to me whether you need to access the data in the
existing database from within a rails app, keeping the existing db
format, or whether you are trying to do a one time extraction of the
data from the existing database into a new one which is in
conventional rails format. ( You said you cannot change the existing
db, but you also said you must use the rails format in the db).


2009/6/8 Arnaud G. removed_email_address@domain.invalid:


In a short time after the application goes on, there will be an
automatic update of the location tables from the other database. Because
the structure of each database (original one and mine) are not the same,
it will be harder. Is there a trick to handle this problem in Rails (to
keep the classic structure for primary and foreign keys in Rails) or is
it better to keep the original struture i would like to import for
primary and foreign keys ? (and use a plugin to define primary / foreign
keys in Rails)


Here is a part of the struture :

==== Migration - create zones

t.string :code_zone, :limit => 5
t.string :desc_zone, :limit => 40
t.string :tool_status, :limit => 1

==== Model zone
validates_uniqueness_of :code_zone
has_many :regions

==== Migration - add zones

Zone.create(:code_zone => ‘EUROP’, :desc_zone => ‘Europe’, :tool_status
=> ‘A’)
Zone.create(:code_zone => ‘NAMER’, :desc_zone => ‘North America’,
:tool_status => ‘A’)

==== Migration - create regions

t.string :code_region, :limit => 5
t.string :desc_region, :limit => 40
t.string :tool_status, :limit => 1
t.references :code_zone

==== Model region
validates_uniqueness_of :code_region
belongs_to :zone

==== Migration - add regions

Region.create(:code_region => ‘AFRIC’, :desc_region => ‘Africa’,
:tool_status => ‘A’, :code_zone => ‘INTER’)
Region.create(:code_region => ‘ASIA’, :desc_region => ‘Asia Pacific’,
:tool_status => ‘A’, :code_zone => ‘ASIA’)
Region.create(:code_region => ‘USA’, :desc_region => ‘USA’, :tool_status
=> ‘A’, :code_zone_id => ‘NAMER’)

I would like to add a find method which return the id of the code zone
name entered within Region.create(…)

Is it possible to rewrite the create method used to create entries in
the database ?