1

各フォームが同じインデックスページに送信される、連続した多数のフォームページが必要です。送信ごとに、入力フィールドの検証方法に応じて異なるビューが表示されます。

コントローラ:

class FormsController < ApplicationController
    include FormsHelper

    def index
        #if we know what view to show, show it, else show first view in the flow
        if(!session.has_key?(:flow_page))
            set_flow_page
        end

        # if form was submitted, I want to add this pages submit data to what I already have in session[:quote]
        if(params.has_key?(:form))
            temp = params[:form]
            form = session[:quote]
            form.merge(temp)
            #session[:quote].deep_merge!(session[:temp])
        end

        # other stuff
        if params[:back] == "Back" && params[:flow][:previous_page] != "refused"
            session[:flow_page] = params[:flow][:previous_page]
        end

        if params[:next] == "Next"
            session[:flow_page] = params[:flow][:next_page]
        end

    end

end

ブロック全体を毎回上書きせずに、各ビューのフォームデータをセッション[:quote]に追加する方法を教えてもらえますか?

4

1 に答える 1

1

何をしようとしているのかわかりませんが、送信時に同じメソッドにヒットしたフォームの履歴を保持したいとします。以下のコードを機能させるには、フォームごとにUIDを持つ非表示のフォームフィールドを追加する必要があります。そのフィールドに「form_name」という名前を付けます

  # init form cache, if not initiated before
  session[:quote] = {} unless session.has_key(:quote)

  # keys to be excluded
  filter_out = [:form_name,:controller, :action]

  # store to cache, with form UID / we filter out params we don't need
  session[params[:form_name]] = params.dup.keep_if { |k,v| !filter_out.include?(k) }
于 2012-06-11T12:22:49.840 に答える