私が扱っているデータ ソースはひどいものです。整数が期待されるいくつかの場所では、「3」が得られます。電話番号フィールドに、「電話番号は xxx」と表示される場合があります。一部のフィールドは単に空白です。
これは問題ありません。各フィールドを解析しているので、「3」はモデルで整数 3 になり、電話番号 (など) は正規表現によって抽出されます。サービスのユーザーは、データが大ざっぱで不完全であることを認識しています。これは、データ ソースの維持方法に関する残念な事実であり、解析ゲームを強化する以外に何もできることはありません。余談ですが、元のデータをより多く解析するにつれて、独自のバージョンのデータをゆっくりと作成していますが、この貧弱なソースは今のところ行う必要があります。
そのため、ユーザーは解析したいデータを選択し、私たちはできる限りのことを行い、部分的/不正確なモデルを返します。ここで、保存する最終的なモデルを検証する必要があります。null にできない特定のフィールドがあり、特定の文字列はフォーマットに準拠する必要があります。
アプリの流れは次のとおりです。
- ユーザーは、解析するデータをサービスに指示します。
- サービスは停止してデータを取得し、可能なものを解析して、取得可能なデータを含む部分モデルを返します。
- ユーザーにデータを表示し、ユーザーが修正を行い、データが収集されていない必須フィールドに入力できるようにします。
- このユーザーが修正したデータは保存されるため、検証されます。
- 検証が失敗した場合、ユーザーが修正を行い、すすぎ、繰り返すためにデータを再度表示します。
完全に無効である可能性があるか、データが含まれていない可能性があるが、最終的に検証する必要があるモデルを持つための最良の方法は何ですか? 私が考えた(そして部分的に実装した)2つの方法は次のとおりです。
- 2 つのモデル - 検証などがあるデータ モデルと、検証がない UnconfirmedData モデル。元のデータは、ユーザーが修正を行うまで UnconfirmedData モデルに配置されます。修正が完了すると、元のデータはデータ モデルに配置され、検証が試行されます。
- Railsの検証ではなく手動で検証が実行される、「確認済みデータ」フラグを持つ1つのモデル。
実際には、私は 2 つのモデルを使用する傾向がありますが、私は Rails にかなり慣れていないので、これを行うためのより良い方法があると思いました.Rails には、そのように私を驚かせる習慣があります :)