Ruby on rails Rails—支持为多个模型创建草稿的好方法

Ruby on rails Rails—支持为多个模型创建草稿的好方法,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-3.2,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 3.2,我想允许用户创建几个模型的草稿(如文章、博客文章等)。我正在考虑通过为我当前的每个模型(如articleDraft、blogpostDraft等)创建一个草稿模型来实现这一点。有更好的方法吗?为每一个应该支持草稿的现有模型创建一个新模型似乎很麻烦,而且工作量很大。我认为最好在表中有一个标记(例如:int列称为draft),以确定记录是否是草稿 有这样一个列而没有单独的表的优点,如我所见: 很容易使您的记录成为非草稿(只需更改标志) 您不会复制数据(因为实际上,您将在草稿和非草稿记录中拥有相同的数

我想允许用户创建几个模型的草稿(如文章、博客文章等)。我正在考虑通过为我当前的每个模型(如articleDraft、blogpostDraft等)创建一个草稿模型来实现这一点。有更好的方法吗?为每一个应该支持草稿的现有模型创建一个新模型似乎很麻烦,而且工作量很大。

我认为最好在表中有一个标记(例如:int列称为draft),以确定记录是否是草稿

有这样一个列而没有单独的表的优点,如我所见:

  • 很容易使您的记录成为非草稿(只需更改标志)

  • 您不会复制数据(因为实际上,您将在草稿和非草稿记录中拥有相同的数据)

  • 编码将很容易,没有复杂的登录

  • 所有数据将放在一个地方,因此误差空间较小


  • 在Ruby工具箱中查看该类别。现任领导人是

    我会走状态机路线。您可以仅在模型处于特定状态时验证每个属性。比多个复选框容易得多,每个状态更改都可以有一个(或多个)与之关联的操作

    在模型中使用标志有一些缺点:

    • 除非数据有效,否则不能另存为草稿。当然,您可以跳过Rails模型中的验证,但请考虑数据库中定义的“notnull”列

    • 要查找“真实”记录,必须使用过滤器(如“WHERE draft=FALSE”)。这会降低查询性能

    作为替代,请查看我的宝石。它将不同模型的草稿存储在一个单独的表中。

    我一直在开发一个Ruby gem,用于创建ActiveRecord数据的草稿状态

    Draftsman的默认方法是通过多态关系将所有草拟模型的草稿数据存储在单个
    drafts
    表中。它将对象状态作为JSON存储在
    对象
    列中,并可以选择将表示更改的JSON数据存储在
    对象_changes
    列中

    Draftsman允许您为每个模型创建单独的草稿模型(例如,
    文章草稿
    博客文章草稿
    )。我同意这种方法相当麻烦,而且容易出错

    将草稿数据拆分为单独的模型(或者根据sameera207的回答,在主表上使用布尔
    draft
    标志)的真正优势在于,您不会得到一个包含大量记录的巨大
    drafts
    表。我想说的是,只有当您的应用程序有大量的使用时,这才成为一个真正的问题


    总之,我的最终建议是将所有草稿数据存储在主模型(
    blog
    )或单个
    drafts
    表中,如果应用程序需要扩展,请根据需要进行分离。

    希望这样做,但这些模型中的许多都有必填字段,但我希望我的草稿没有任何要求跳过记录中的验证是草稿(可以使用“with_options”),例如:with_options:if=>:is_admin?do | admin | admin.validates:password,:length=>{:minimum=>10}admin.validates:email,:presence=>true end,检查5.4 in是否可以保存未通过验证的修订?例如,一篇文章应该总是有一个标题,但一篇文章草案可以有一个空标题title@zazinteractive,是的,请参见sameera207的回答中的评论。