Harry
Harry

Reputation: 1699

How do I add to a rails session when submitting to same page?

I have a need for a number of form pages in a row where each form submits to the same index page. On each submit a different view is displayed depending on how the input fields are validated.

Controller:

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

Could someone tell me how to add the form data from each view into the session[:quote] without overwriting the whole block each time?

Upvotes: 1

Views: 290

Answers (1)

Haris Krajina
Haris Krajina

Reputation: 15286

Not sure what you are trying to do but lets assume you want to keep history of your forms which hit same method on submit. For bellow code to work you need to add hidden form field with UID for each form. Name that field "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) }

Upvotes: 1

Related Questions