0

と の 2 つのテーブルがOrder(s)ありProduct(s)ます。そして、それらを接続する 3 番目のものがありますOrdersProducts。一度にいくつかのモデルを次のように保存したいと思いますOrdersProducts

単一の Order を選択し、いくつかnrの選択から選択して、すべてを保存したいと思います。grid,productsadjust amounts

私の問題は、検証エラーがある場合、適切な方法でユーザーに表示できないことです。

フォームに直接表示するのが最善ですが、3番目のモデルをフォームに含める方法がわかりません。私はすでに を持っておりform、複数 (または複数) のモデルを一度に保存できますが、たとえば のようなエラーが発生した場合、an amount is missingそれをユーザーに伝える方法がわかりません。

現在、エラーのあるものを除いて保存は完了していますが、この方法では、ユーザーはすべての行が保存されたかどうかを常に確認する必要があり、ナンセンスです。

最善の方法は、フォーム上でユーザーを表示し、グリッド内の問題のある行を強調表示することです (または、これまたは特定の行またはフィールドに問題があることを示す他の方法) 。

意味はありますか?はいの場合、これに対する良い(そして簡単な...?)解決策は何ですか?

どうもありがとう!BR c

4

3 に答える 3

0

CFormModelを使用して、ユーザーが入力したデータを検証します。データを検証し、データを別のモデルに保存する関数をフォーム モデルに追加します。データベース レベルで予期しないエラーをキャプチャするには、トランザクションを使用する必要があります。

于 2013-06-28T15:15:59.223 に答える
0

あなたが何をしているのか理解するまでに、これを数回読む必要がありました。注文入力の基本問題です。通常、これは注文を作成してから、注文の詳細を 1 つずつ作成することで解決されます。それらが作成されると、それらをグリッドに表示できます。私を混乱させたのは、空の注文がすでに作成されていて、注文に製品を多対多に割り当てようとしているように見えることです。それは物事を非常に複雑にしています。

次のことをお勧めします。

  1. 新しい注文を作成します。これは、ユーザーがショッピング カートに入れる最初のアイテムを選択したとき、または単に注文ヘッダー情報を入力する注文作成画面を開始したときです。
  2. 新しく作成された注文にアイテムを追加します。繰り返しますが、これはショッピング カートに追加された最初のアイテムである場合もあれば、ボタンをクリックして作成フォームを表示し、単一のアイテムを注文に追加するだけの場合もあります。製品が追加されるたびに、その製品の検証を実行できます。
  3. すべての製品が注文に追加されるまで、ステップ 2 を繰り返します。

作成フォームは、グリッド ビューとヘッダー属性を使用してページに埋め込むことができ、注文に追加された製品ごとにグリッドを更新できるように ajax プロセスを使用して投稿できます。ページに戻ったり、ショッピング カートのように商品ページに戻って次の商品を選択したりすることもできます。ただし、いずれの場合も、一度に 1 つの製品を追加して検証するだけです。この多対多の選択は、選択する値の数が少なく、必要な唯一の検証が選択が必要かどうかである構成シナリオでのみうまく機能します。

于 2013-06-28T13:29:02.267 に答える