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

Person から ContactDetails への has_one アドレスの移行を含め、どのようにリファクタリングするのですか? その後、モデルは次のようになります。

class Person < ActiveRecord::Base
  has_one :contact_details
end

class ContactDetails < ActiveRecord::Base
  has_one :address
end

class Address < ActiveRecord::Base
end
4

1 に答える 1

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

残っているのは、何らかの方法でコードをリファクタリングすることだけです。

于 2010-09-22T20:00:31.280 に答える