Reputation: 1699
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
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