我想允许用户创建几个模型的草稿(例如文章,博客文章等)。我正在考虑通过为我当前的每个模型(例如articleDraft,blogpostDraft等)创建草图模型来实现这一点。有一个更好的方法吗?为应该支持草稿的每个现有模型创建一个新模型似乎很麻烦,并且需要做很多工作。
答案 0 :(得分:7)
我认为更好的是在表格中有一个标志(例如:名为草稿的int列),以确定记录是否为草稿。
如我所见,将这样一个列放在一个单独的表中的优点:
很容易让你的记录非选秀(只是改变旗帜)
您不会复制数据(因为实际上您会在草稿和非草稿记录中使用相同的内容)
编码很简单,没有复杂的登录
所有数据都在一个地方,因此错误的空间
答案 1 :(得分:1)
在Ruby Toolbox中查看Active Record Versioning类别。现任领导人是Paper Trail。
答案 2 :(得分:0)
我走下状态机路线。当模型仅处于特定状态时,您可以验证每个属性。比多个复选框容易得多,每个状态更改都可以有一个与之关联的操作(或操作)。
答案 3 :(得分:0)
在模型中有一个标志有一些缺点:
除非数据有效,否则无法另存为草稿。当然,您可以跳过Rails模型中的验证,但考虑数据库中定义的“NOT NULL”列
要查找“真实”记录,您必须使用过滤器(例如“WHERE draft = FALSE”)。这可能会降低查询性能。
作为替代方案,请查看我的宝石drafting。它将不同模型的草稿存储在单独的表中。