Ruby 及时存储模型关系

Ruby 及时存储模型关系,ruby,ruby-on-rails-3,model,relational-database,foreign-key-relationship,Ruby,Ruby On Rails 3,Model,Relational Database,Foreign Key Relationship,我正在开发一个应用程序,允许人们请求为特定工作生成保修。他们提供诸如使用了什么产品等信息。。。(他们的一些选择是从系统中已经存在的项目列表中提供的。然后,我们根据这些选择生成保修 我一直在苦苦挣扎,想让一份经批准的保修单及时成为一份快照,因为它取决于可能随时间变化的相关记录 我能想到的最简单的方法是不存储与源表的关系(例如product_id)而是将产品写成字符串。这似乎有点混乱。另一种方法是不允许从产品表中删除/修改产品,除非没有附加任何保证。也许实现一个“替换为”列,指向同一产品的编辑版本?

我正在开发一个应用程序,允许人们请求为特定工作生成保修。他们提供诸如使用了什么产品等信息。。。(他们的一些选择是从系统中已经存在的项目列表中提供的。然后,我们根据这些选择生成保修

我一直在苦苦挣扎,想让一份经批准的保修单及时成为一份快照,因为它取决于可能随时间变化的相关记录

我能想到的最简单的方法是不存储与源表的关系(例如product_id)而是将产品写成字符串。这似乎有点混乱。另一种方法是不允许从产品表中删除/修改产品,除非没有附加任何保证。也许实现一个“替换为”列,指向同一产品的编辑版本?我在一个shopp中这样做了我以前用过手推车,效果很好。我只是有很多关系要处理,我想知道是否有一种方法我没有想到?

关于:

  • 添加1:0的“产品已停产”表,并提供保修。只有列是保修id
  • 添加具有以下内容的“历史产品表”:

    与产品表相同的列

    填充日期/时间的附加时间戳字段

    产品id/时间戳的主键

    关于产品id的索引

  • 一种删除/修改触发器/程序,用于:

    选择产品的所有保修

    如果有任何保修,则将产品详细信息复制到“历史产品表”,添加主键的第二部分

    对于发现的每一项保修,在“产品停产”表中插入一条记录


  • 这是基于这样一个前提,即您可能希望以不同于活动产品的方式来处理非连续产品的保修问题。

    这不是一个坏主意。我想替代方案只是使用一个允许软删除/替换的插件。我只是想知道是否有一种替代策略可能不适用于活动产品我突然想到:)