Ruby on Rails对“草案”状态最佳实践的活动记录验证

时间:2012-09-20 17:09:50

标签: ruby-on-rails validation design-patterns

我正在开发一个表单,我希望用户可以选择返回。最终需要完成所有领域,我希望在将记录标记为“完整”之前加入适当的模型级别字段验证。我可以想到几种方法:

  1. 创建两个表,一个用于处于“草稿”状态的记录,具有更宽松的验证规则(即,对于要保存的记录不一定需要完整的字段),以及用于存储记录的第二个表已经提交为“完整”的,显然有更严格的验证规则。

  2. 只创建一个表来存储记录,并使用标记为“isComplete”的字段,并根据此值确定要应用的验证规则。

  3. 我倾向于选项#2因为它涉及较少的工作部分(在选项#1中我必须确保当我将记录状态从“草稿”更改为“完成”时,它将从一个表中删除并且添加到另一个)。问题是我不知道如何在Rails中优雅地做到这一点。

    最终,我确信此问题已经解决,我的问题是: 在这种情况下,最佳做法是什么?

1 个答案:

答案 0 :(得分:3)

绝对是第二个选项。有一个布尔值的isComplete或draft选项。然后在模型中,您可以根据isComplete字段的状态控制要运行的验证。这可以通过多种方式完成,例如Rails具有conditional validation的概念,允许您指定:if验证选项,以便您可以根据完整状态限制运行的内容。您还可以添加before_save或before_update挂钩,以根据记录是否为草稿来运行方法。使用这两个工具,您应该能够以直观的方式将所有内容放在一个表中。