【问题标题】:How to migrate ActiveModel with STI?如何使用 STI 迁移 ActiveModel?
【发布时间】:2017-02-07 21:56:59
【问题描述】:

我的系统以前已经有 Product 模型,其中包含许多现有记录,但现在我希望有一个 BaseProduct 作为基本 ActiveRecord::Base(移动一些常用属性)并使 Product 和(Future)Product 可以扩展它.

问题:如何迁移那些旧记录?我能想到的如下:

  • rails g model BaseProduct.
  • 创建具有 STI 支持的产品和(未来)产品类。
  • rake 任务将所有旧产品表记录移至新 BaseProduct。
  • 删除旧的产品表。

还有什么遗漏的吗?

【问题讨论】:

  • 请详细了解
  • 添加了我打算做什么的更多详细想法
  • 我会说不要删除旧表重命名它,这样你就不需要移动所有记录
  • STI 是一种管理使用相同数据的不同域的方法。所以理想情况下,您不需要更改表格。你真的需要性病吗?我们正在使用它来拆分我所在的不同类型的出口。对文件要做的事情完全不同,但所有数据都是相同的。如果您不是这种情况,那么您可能不需要 STI。
  • @unflores 是的,基本上字段是一样的,我只是想使用继承来控制不同产品的不同价格等,但由于产品已经从 ActiveRecord::Base 扩展,我怎么能不接触数据库并为其提供另一个 BaseProduct?

标签: ruby-on-rails


【解决方案1】:

不要更改您的表格,只需从您继承的类中引用原始表格:

class BaseProduct < ApplicationRecord
  self.table_name = "products"
end

class Product < BaseProduct
end

class FutureProduct < BaseProduct
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多