如何执行“移动字段”重构活动记录模型

发布于 2024-09-24 12:28:30 字数 532 浏览 3 评论 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

This is a fairly common refactoring, Martin Fowler calls it 'move field'. Given 3 models:

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

class ContactDetails < ActiveRecord::Base
end

class Address < ActiveRecord::Base
end

how do I refactor, including migration, the has_one address from Person to ContactDetails? Afterwards the models would look like:

class Person < ActiveRecord::Base
  has_one :contact_details
end

class ContactDetails < ActiveRecord::Base
  has_one :address
end

class Address < ActiveRecord::Base
end

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

超可爱的懒熊 2024-10-01 12:28:30

所以我已经完成了迁移,实际上非常简单,只需要重命名地址上的外键

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

,所以剩下的就是以某种方式重构代码。

So I've got as far as the migration, pretty simple actually, just need to rename the foreign key on addresses

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

so all that's left is to refactor the code, somehow.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文