我正在使用的数据源非常糟糕。有些地方你会期望整数,你会得到“三”。在电话号码字段中,您可能会收到“电话号码是xxx”。有些字段只是空白。使用'故意'无效数据对模型进行验证
这是好的,因为我解析每个字段,所以“三”将在我的模型中以整数3结尾,电话号码(等)将通过正则表达式提取。该服务的用户知道数据是粗略和不完整的,因为这是我们的数据源维护方式的一个不幸事实,我们无法做到这一点,但加紧了我们的解析游戏!另外,我们在解析越来越多的原始数据时,正在慢慢制作自己的数据版本,但这个可怜的数据源现在需要做。
因此,用户选择他们希望解析的数据,并且我们尽我们所能,返回一个部分/不正确的模型。现在我们要存储的最终模型应该得到验证 - 有些字段不能为空,某些字符串必须遵守格式等等。
该应用的流程为:
- 用户告诉哪个数据服务到 解析。
- 服务关闭并抓取 的数据,解析它可以和 返回一个部分模型与 无论它可以检索的任何数据。
- 我们向用户显示数据, 允许他们进行更正 并填写任何未收集数据的必填字段 。
- 这个用户更正的数据将被保存,因此被验证为 。
- 如果验证失败,再次显示数据 供用户修复,冲洗& 重复。
什么是最好的方式去让模型开始可能完全无效或不包含数据,但最终需要验证?这两个方面,我认为(和部分实现)是:
- 2模型 - 一个数据模型,其中有验证等,以及UnconfirmedData模型,它没有验证。将原始数据放入UnconfirmedData模型中,直到用户进行更正为止,然后将其放入数据模型并尝试进行验证。
- 一个模型,带有“确认数据”标志,验证是手动执行的,而不是Rails的验证。
在实践中我倾向于使用2种型号瘦,但我很新到Rails,所以我觉得有我是做一个更好的方式,Rails有奇怪我这样:)
非常感谢您的澄清,我确实认为这是我将要走的路。数据将在请求之间移动,甚至可能会话,因此将临时数据存储起来会很有用;这在未来可能比现在更重要。感谢railsforum链接也非常有用。 – Richter 2011-01-08 16:10:19