Rails:渐进式验证,使用STI还是其他不同的东西?

时间:2011-08-01 00:16:44

标签: ruby-on-rails ruby-on-rails-3 validation wizard single-table-inheritance

我有一个rails应用程序,用户可以共享特定类型的照片。目前,该应用要求照片在有效之前以多种方式进行分类,因此用户必须一次上传一张照片并对其进行分类,以便将其保存到数据库中。

分类需要一些时间,因此我希望允许用户上传批量照片,然后在有时间时返回并对其进行分类,但是当照片存储时没有完全分类,我不希望它们混合在一起“完整”的照片。

我理想情况下这是一种“向导”系统,用户可以一次上传一堆照片,然后通过个人队列进行处理,并在有时间的情况下对每张照片进行分类(完成创建)。

我的问题是:你会如何处理这样的问题?

我一直在考虑使用单表继承来创建Photo的两个子类:IncompletePhotoCompletePhotoIncompletePhoto只需要图像文件本身,但CompletePhoto需要分类。用户可以查看自己的不完整照片,但应用程序内的搜索结果只会返回CompletePhotos。

这听起来像是我试图解决的问题的正确方法,还是有更好的方法?我之前从未使用过STI,我不确定它是不是一个好主意。

1 个答案:

答案 0 :(得分:0)

我想说,如果你有不同的对象一些但不是所有的公共属性,那么创建STI是有用的,对于你会受益的情况来自DRY的数据库和模型。我不确定是否有办法正确更改此类模型的实例类型。好吧,您只需修改type列本身,但对象的Ruby类将是相同的,因此将进行验证,除非您在保存后重新获取模型,然后手动运行验证。后者对我来说听起来像是一个肮脏的黑客。

作为一种正确的方法,我建议您添加complete列,并使用validates ..., :if => :complete形式的验证程序。