我正在寻找一个插件/动作来允许我的模型版本化.找到可用解决方案的列表很困难.到目前为止我收集了:
acts_as_versioned
simply_versioned
vestal_versions
最后两个解决方案只需要一个版本表 - 这听起来不错,但我对于如何通过这种方式处理迁移的简易性感到不好(因为它们将状态序列化为字符串).
另一方面,acts_as_versioned
有点尘土飞扬(1月最后一次提交).这些中有任何最近的经验吗?或者我可能忽略了其他解决方案(或叉子)?
我的问题:我应该推出自己的模型版本还是使用其中一个已经存在的版本化宝石?如果我应该使用宝石,哪一个最适合这个应用?
关于我的应用的信息
我的应用程序是一个简单的清单应用程序 有清单和工作,我跟踪响应和提交的用户响应.响应告诉我使用说的是什么("完成",注意"我们需要更多的拖把.")并且提交告诉我何时填写了特定的清单(因为给定的清单可能有很多提交和答复)清单).我会在下面展示我的协会,以防万一.
#checklist.rb
class Checklist < ActiveRecord::Base
has_many :jobs, :through => :checklists_jobs
has_many :submissions
end
#job.rb
class Job < ActiveRecord::Base
has_many :checklists, :through => :checklists_jobs
has_many :responses
end
#response.rb
class Response < ActiveRecord::Base
belongs_to :job
belongs_to :submission
belongs_to :user
end
#submission.rb
class Submission < ActiveRecord::Base
belongs_to :user
belongs_to :checklist
has_many :responses
end
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用版本控制
我想要做的是记录用户对清单上的工作的回应.但是我想确保如果核对表发生变化,我可以重现原始核对清单(带有响应信息).例如,我想确保我可以为所有以前版本的清单回答这个问题:
"清单看起来是什么样的,三个星期二的回复是什么?"
如果我更改清单或其任何工作,我不想失去对该问题的答案.
我认为最好的方法是使用版本控制(用于作业和清单).例如,如果管理员更改了作业(名称或描述),那么我不会更新现有作业,而是创建新版本并保留旧版本.然后我就把旧的东西放在适当的位置,并将清单指向新版本的工作.
我应该使用宝石还是自己卷?
我想要决定的是我是否应该自己滚动(编写代码以增加版本,将所有内容指向版本,并保留以前的版本)或使用现有解决方案.两个最佳解决方案似乎是paper_trail和vestal_versions.我没有足够的声望点来发布两个以上的链接,所以我将链接到每个gem的Railscast(如果你愿意,它会让你进入gem本身).使用paper_trail和Railscast进行Railscast 255撤消和模型版本控制 - 177使用vestal_versions.
推销自己的优点:
我要自己动手:
这看起来很重要,因为不管我决定我基本上都会被困住.我认为以后从一种方法切换到另一种方法并不容易.
gem database-versioning vestal-versions paper-trail-gem ruby-on-rails-3.2