新しいドメインの関連付けで名前の変更が必要になるため、名前空間の問題が発生します。移行では Ruby コードも実行できるため、移行は次のようになります。
以下は、必要な一般的なコードです。
# First Migration to rename the domain field
def RenameDomainField < ActiveRecord::Migration
def self.up
rename_column :domain_datas, :domain, :domain_name
end
def self.down
#code for opposite of up
end
end
# Second Migration to add the Domain model
def CreateDomains < ActiveRecord::Migration
def self.up
create_table :domain do |t|
t.string :domain_name
end
end
def self.down
#code for opposite of up
end
end
#Create a new relationship:
def DomainData < ActiveRecord::Base
belongs_to :domain
end
# A third migration to move the data over
def RefactorDomainData < ActiveRecord::Migration
def self.up
#Add the new forgein key
add_column :domain_datas, :domain_id, :integer
#create the new domain records and link them
DomainData.all do |domain_data|
domain_data.create_domain(:domain_name => domain_data.domain_name)
end
#trash the old column
remove_column :domain_datas, :domain_name
end
def self.down
#code for opposite of up
end
end