2

ユーザーに戻るオプションを持たせたいフォームを開発しています。最終的にはすべてのフィールドに入力する必要があります。レコードに「完了」のラベルを付ける前に、適切なモデルレベルのフィールド検証を組み込みたいと思います。私はこれを行うためのいくつかの方法を考えることができます:

  1. 2つのテーブルを作成します。1つは「ドラフト」状態のレコード用で、検証ルールが緩い(つまり、レコードを保存するためにフィールドを必ずしも入力する必要はありません)。もう1つは、「」として送信されたレコードを格納するためのテーブルです。完全」、明らかにより厳格な検証ルールを使用します。

  2. 「isComplete」というラベルの付いたフィールドを使用して、レコードを格納するテーブルを1つだけ作成し、この値に基づいて、適用する検証ルールを決定します。

オプション#2に傾倒しているのは、作業部分が少ないためです(オプション#1では、レコードの状態を「ドラフト」から「完了」に変更すると、1つのテーブルから削除され、他の)。問題は、Railsでこれをエレガントに行う方法がわからないことです。

最終的に、この問題は以前に解決されたと確信しているので、私の質問は次のとおりです。この状況でのベストプラクティスは何ですか?

4

1 に答える 1

3

間違いなくオプション番号2。ブール値であるisCompleteまたはdraftオプションがあります。次に、モデルで、isCompleteフィールドの状態に基づいて実行する検証を制御できます。これはさまざまな方法で実行できます。たとえば、Railsには条件付き検証の概念があり、検証で:ifオプションを指定できるため、完全な状態に基づいて実行するものを制限できます。また、before_saveまたはbefore_updateフックを追加して、レコードがドラフトであるかどうかに基づいてメソッドを実行することもできます。これらの2つのツールを使用すると、直感的な方法ですべてを1つのテーブルにまとめることができます。

于 2012-09-20T17:20:13.063 に答える