Как выполнить рефакторинг 'move field' на моделях с активной записью - PullRequest
0 голосов
/ 22 сентября 2010

Это довольно распространенный рефакторинг, Мартин Фаулер называет это «полем перемещения». Дано 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 to ContactDetails? После этого модели будут выглядеть так:

class Person < ActiveRecord::Base
  has_one :contact_details
end

class ContactDetails < ActiveRecord::Base
  has_one :address
end

class Address < ActiveRecord::Base
end

1 Ответ

0 голосов
/ 23 сентября 2010

Итак, я дошел до миграции, на самом деле довольно просто, просто нужно переименовать внешний ключ по адресам

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

, так что все, что осталось, это как-то реорганизовать код.

...