我有一个名为Domain_Data
的表,它有一个名为domain
的唯一字符串列。因为很多东西需要在我的应用程序中指向域,所以我将把Domain
分离到它自己的单独模型。在Domain_Data
中,我想用domain
的外键指针替换Domain.id
列。棘手的部分是更新数据本身,以便域字符串位于Domain
,id
指针位于Domain_Data
。
我很清楚如何在纯SQL中进行这样的迁移,但是我想知道“Railsy”是如何进行这样的迁移的。这一切都可以通过迁移完成,还是应该通过rake任务等手动完成?
我是一个Rails newb,正在寻找像这样进行迁移的规范方法。使用Rails 2.3
答案 0 :(得分:0)
您将遇到一些命名空间问题,因为您的新域关联需要进行一些重命名。 迁移也可以运行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