Источник данных, с которым я работаю, ужасен. В некоторых местах, где вы ожидаете целых чисел, вы получаете «Три». В поле номера телефона вы можете получить «телефон # xxx». Некоторые поля просто пусты.Проверка на модели с «преднамеренными» недопустимыми данными
Это нормально, так как я разбираю каждое поле так, что «Три» в моей модели будет целым числом 3, телефонные номера (и такие) будут извлечены через регулярное выражение. Пользователи сервиса ЗНАЮТ, что данные являются отрывочными и неполными, так как это печальный факт того, как поддерживается наш источник данных, и мы ничего не можем с этим поделать, но активируем нашу парсинговую игру! В стороне, мы производим нашу собственную версию данных медленно, поскольку мы анализируем все больше и больше исходных данных, но этот плохой источник должен сделать сейчас.
Таким образом, пользователи выбирают данные, которые они хотят проанализировать, и мы делаем все возможное, возвращая частичную/неправильную модель. Теперь окончательная модель, которую мы хотим сохранить, должна быть проверена - есть определенные поля, которые не могут быть нулевыми, некоторые строки должны придерживаться формата и так далее.
Поток приложения является:
- Пользователь указывает службу, данных для синтаксического анализа.
- Служба отключается и захватывает данные, анализирует, что она может и возвращает частичную модель с любыми данными, которые она могла бы получить.
- Мы показываем данные пользователю, , позволяя им вносить поправки и заполнить любые обязательные поля , по которым не было данных.
- Данные, скорректированные пользователем, должны быть сохранены и поэтому подтверждены.
- Если валидация не удалась, покажите данные повторно , чтобы пользователь мог исправить ошибки, ополаскивать & повторить.
Каков наилучший способ иметь модель, которая начинает быть потенциально полностью недействительной или не содержать данных, но которая должна быть подтверждена в конце концов? Двумя путями, о которых я думал (и частично реализованными), являются:
- 2 модели - модель данных с проверками и т. Д., А также модель UnconfirmedData, которая не имеет валидаций. Исходные данные помещаются в модель UnconfirmedData до тех пор, пока пользователь не внесет свои исправления, после чего он будет помещен в модель данных и будет предпринята проверка.
- Одна модель с флагом «подтвержденные данные», причем проверка выполняется вручную, а не проверка Rails.
На практике я склоняюсь к использованию 2 модели, но я довольно новыми для Rails, так что я думал, что мне будет лучше способ сделать это, Rails имеет привычку удивлять меня так :)
Большое спасибо за разъяснение, я думаю, что так я пойду. Данные будут перемещаться между запросами и, возможно, даже сеансами, поэтому будет полезно хранить предварительные данные; это, вероятно, будет более важным в будущем, чем сейчас. Спасибо за ссылку railsforum, тоже очень полезно. – Richter