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