5

多くのフィールド、has_many関連付け、追加された画像image_columnなどを含む非常に複雑なモデルを使用しています...

新しいオブジェクトは、複数ページのフォーム (8 つの手順) によって追加されます - これらの手順の間で検証と伝達を行うにはどうすればよいですか?

validation_group各ステップの検証を定義するのに役立つと思いますが、全体的な設計はどうですか?

4

3 に答える 3

6

全体的な設計については、複雑なモデルや複数のモデルを処理するときにコントローラーを薄くしてビューを愚かに保つ方法として、プレゼンター レイヤーの概念を検討することをお勧めします (Jay Fields は彼のブログ エントリRails: Presenter Patternで定義しています)。

于 2008-10-14T13:28:06.417 に答える
4

、 などの一連のメソッドを持つことができstep_1step_2各メソッドは、前のステップから必要なデータが送信されたことを確認します。たとえば、ステップ 3 で、ステップ 1 で収集および解析されたすべてのデータに引き続きアクセスできるように、データをセッションに保存できます。最後のステップでは、セッションに保存したすべてのデータとデータを入れます。最後から2番目のステップから使用し、データベースまたはデータを収集する対象に新しい行を作成します。ユーザーがステップを間違えた場合は、前のステップにリダイレクトし、入力したデータをフォームに入力します。たとえば、ユーザーがステップ 2 を台無しにしてステップ 3 につながるフォームを送信した場合、step_3メソッドで問題をキャッチし、ユーザーをstep_2メソッドを使用して、ステップ 2 のフォーム要素が事前に入力されていることを確認してください。

進行中にセッションにデータを保存したくない場合は、ユーザーがステップ 1 を送信した後に新しいデータベース行を作成し、連続する各ステップで新しいデータを収集するときにその行のフィールドを更新するだけで済みます。行に「完了」のフラグを設定し、最初に 0 に設定し、ユーザーがすべての手順を正常に完了した後に 1 に設定することができます。

また、ユーザーが前のステップに進むことを許可することもできます (たとえば、ユーザーがステップ 5 にいるときにステップ 3 に戻れるようにする)。

最初のステップに「名前」と「メール」フィールドを持つフォームがあるとします。step_2メソッドでは、 と が渡され、有効であることを確認する必要がparams[:name]ありparams[:email]ます。選択した方法で、それらをセッションまたはデータベース行に保存します。次に、ステップ 2 で、フィールド「年齢」と「性別」を含むフォームを作成します。step_3メソッドでは、とparams[:age]params[:gender]渡されて有効であることを確認する必要があります。また、ユーザーが URL を入力してステップ 3 に直接アクセスできないようにするために、ユーザーがステップ 1 を完了していることを確認する必要もあります。等々。

于 2008-12-11T21:54:18.317 に答える
0
class Campaign < ActiveRecord::Base
    with_options(:if => lambda { |campaign| campaign.on_or_past_step(:spam_can) }) do |spam_can|
      spam_can.validates_associated  :spam_can
      spam_can.validates_presence_of :spam_can
    end
  def on_or_past_step
   :
   :
  end
end

これは進行中の作業ですが、正しい軌道に乗っているように感じます。AASM状態を使用して、実行する検証を決定しています。私の場合、問題のモデルはリソースであるため、ルートがどのように機能するかはまだわかりません。たとえば、どのフィールドのグループを編集アクションにする必要がありますか?

于 2009-02-01T23:41:05.517 に答える