【发布时间】:2011-01-06 14:21:59
【问题描述】:
我使用的数据源很糟糕。有些地方你会期望整数,你会得到“三”。在电话号码字段中,您可能会得到“电话号码是 xxx”。有些字段只是空白。
这没关系,因为我正在解析每个字段,因此“三”将在我的模型中以整数 3 结尾,电话号码(等)将通过正则表达式提取。该服务的用户知道数据是粗略且不完整的,因为这是我们的数据源维护方式的不幸事实,我们对此无能为力,只能加强我们的解析游戏!顺便说一句,随着我们解析越来越多的原始数据,我们正在缓慢地生成我们自己的数据版本,但这个糟糕的来源现在必须做。
因此,用户选择他们希望解析的数据,然后我们尽我们所能,返回部分/不正确的模型。现在应该验证我们要存储的最终模型 - 某些字段不能为空,某些字符串必须遵守格式等等。
应用的流程是:
- 用户告诉服务哪些数据 解析。
- 服务停止并抓取 数据,解析它可以和 返回一个部分模型 它可以检索到的任何数据。
- 我们向用户显示数据, 允许他们进行更正 并填写任何必填字段 没有收集任何数据。
- 这个用户更正的数据是 已保存,因此经过验证。
- 如果验证失败,再次显示数据 供用户进行修复、冲洗和 重复。
让模型开始时可能完全无效或不包含数据但最终需要验证的最佳方法是什么?我想到(并部分实施)的两种方法是:
- 2 个模型 - 一个具有验证等的数据模型和一个没有验证的 UnconfirmedData 模型。原始数据会被放入 UnconfirmedData 模型,直到用户做出更正后,才会将原始数据放入 Data 模型并尝试验证。
- 一个模型,带有“已确认数据”标志,手动执行验证而不是 Rails 验证。
在实践中我倾向于使用 2 种模型,但我对 Rails 还很陌生,所以我认为我有更好的方法来做到这一点,Rails 有这样让我惊讶的习惯 :)
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 rails-models