0

Ceci est un refactoring assez commun, Martin Fowler l'appelle 'champ de déplacement'. Étant donné 3 modèles:Comment effectuer un refactoring de 'champ de déplacement' sur des modèles d'enregistrements actifs

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

class ContactDetails < ActiveRecord::Base 
end 

class Address < ActiveRecord::Base 
end 

comment refactoriser, y compris la migration, l'adresse has_one de Person à ContactDetails? Ensuite, les modèles ressembleraient:

class Person < ActiveRecord::Base 
    has_one :contact_details 
end 

class ContactDetails < ActiveRecord::Base 
    has_one :address 
end 

class Address < ActiveRecord::Base 
end 

Répondre

0

J'ai aussi loin que la migration, assez simple en fait, il suffit de renommer la clé étrangère sur les adresses

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 

donc tout ce qui reste est pour refactoriser le code, en quelque sorte.