Activerecord 属于某一特定版本

Activerecord 属于某一特定版本,activerecord,versioning,vestal-versions,paper-trail-gem,Activerecord,Versioning,Vestal Versions,Paper Trail Gem,我需要在订单中存储模型的特定版本。我计划使用一个版本控制gem,比如or。我想要订单中自动加载的正确版本 理想情况下,我只需使用order.update_属性(:stuff=>bunded_stuff)存储对象,订单就会记住物品的版本,以便后续的加载会使order.reload.stuff仍然是保存订单时的对象 有没有一个gem可以提供这样的功能?我找不到 否则,我如何通过ActiveRecord和版本控制gem实现这一点呢?实际上,我可以通过PaperTrail实现我想要的,并且: class

我需要在订单中存储模型的特定版本。我计划使用一个版本控制gem,比如or。我想要订单中自动加载的正确版本

理想情况下,我只需使用
order.update_属性(:stuff=>bunded_stuff)
存储对象,订单就会记住物品的版本,以便后续的加载会使
order.reload.stuff仍然是保存订单时的对象

有没有一个gem可以提供这样的功能?我找不到


否则,我如何通过ActiveRecord和版本控制gem实现这一点呢?

实际上,我可以通过PaperTrail实现我想要的,并且:

class Stuff < ActiveRecord::Base
  has_paper_trail
end

class Order < ActiveRecord::Base
  belongs_to :stuff

  def stuff_with_version
    stuff_without_version.version_at(created_at) if stuff_without_version
  end

  alias_method_chain :stuff, :version
end
class-Stuff
不确定这是否一定是最适合您的设计,但您可以使用纸质记录。只需在模型类的顶部添加宏方法“has_paper_trail”,只要实例发生更改,就会在名为“versions”的表中创建一个序列化副本,并将多态关系返回到实际模型

假设您希望将“产品”的特定版本与订单关联,请首先向“版本”表添加关系,即向订单添加“版本id”的迁移,然后按如下方式设置关系:

class Order
  belongs_to :version

  def product
    version
  end

  def product=(p)
    version=p.versions.last
  end

end

class Product
  has_paper_trail
end
使用此功能,当您将产品添加到订单时,它会将订单与产品的最新版本关联起来。当您检索产品时,它将拉出版本;i、 e.创建订单时的产品。让关系以另一种方式运作(即将产品与订单联系起来)可能更复杂,但这只是一个开始