0

这是一个相当常见的重构,Martin Fowler将其称为“移动字段”。鉴于3款:如何在活动记录模型上执行“移动字段”重构

class Person < ActiveRecord::Base 
    has_one :contact_details 
    has_one :address 
end 

class ContactDetails < ActiveRecord::Base 
end 

class Address < ActiveRecord::Base 
end 

我该如何重构,包括迁移,has_one地址从Person到ContactDetails?之后的车型会是什么样子:

class Person < ActiveRecord::Base 
    has_one :contact_details 
end 

class ContactDetails < ActiveRecord::Base 
    has_one :address 
end 

class Address < ActiveRecord::Base 
end 

回答

0

所以我就迁移了,其实很简单,只需要重命名地址

class MoveAddressFromPersonToContactDetails < ActiveRecord::Migration 

    def self.up 
    rename_column :addresses, :person_id, :contact_details_id 
    end 

    def self.down 
    rename_column :addresses, :contact_details_id, :person_id 
    end 

end 

因此,所有剩下的就是外键以某种方式重构代码。