Vikas Gholap
2009-Jul-17 05:47 UTC
record is not store in DB & session.delete(''key'') not workin
Hi, I''m creating multi page form (wizard like pages) in my application using code at http://snippets.dzone.com/posts/show/277#related problem ===> When I create a new coupon first time, it is stored in DB. After saving I try to clear out(delete old session in which coupon object is stored) session using session.delete(''partial_coupon'') But session is not get clear and also coupon object is not get store in DB. Please tell me what went wrong? Following is controller code----> class CouponsController < ApplicationController before_filter :get_partial_coupon_from_session, :only => [:business_coupon] after_filter :save_partial_coupon_in_session, :only => [:business_coupon] def business_coupon case request.method when :post @current_stage = params[''current_stage''] if @current_stage == "stage1" @coupon.attributes = {:title => params[:coupon][:title]} if valid_for_attributes(@coupon,["title"]) @current_stage = "stage2" end elsif @current_stage == "stage2" @coupon.attributes = {:tag_line => params[:coupon][:tag_line]} if valid_for_attributes(@coupon,["tag_line"]) @current_stage = "stage3" end elsif @current_stage == "stage3" @coupon.attributes = {:price => params[:coupon][:price]} if @coupon.save ##### HERE I TRY TO CLEAR SESSION DATA session.delete(''partial_coupon'') flash[''notice''] = "Coupon successfully created." render :action => "show", :id => @coupon else flash[:error] = "Could not save coupon #{@coupon.errors.full_messages().join('', '')}" end end when :get @current_stage = "stage1" end end private def get_partial_coupon_from_session unless session[''partial_coupon''].nil? @coupon = session[''partial_coupon''] else @coupon = Coupon.new end end def save_partial_coupon_in_session unless @coupon.nil? session[''partial_coupon''] = @coupon end end def valid_for_attributes( model, attributes ) unless model.valid? errors = model.errors our_errors = Array.new errors.each { |attr,error| if attributes.include? attr our_errors << [attr,error] end } errors.clear our_errors.each { |attr,error| errors.add(attr,error) } return false unless errors.empty? end return true end def clear_stage_errors unless session[''partial_coupon''].nil? session[''partial_coupon''].errors.clear end end end ############### VIEWS #############3 new.html.erb <h1>New coupon</h1> <% form_for(@coupon) do |f| %> <%= hidden_field_tag "current_stage", "#{@current_stage}"%> <%= f.error_messages %> <%= render :partial => "coupons/#{@current_stage}", :locals => {:f => f} %> <% end %> <%= link_to ''Back'', coupons_path %> ----------------------------- _stage1.html.erb <p> Title<br /> <%= text_field "coupon","title" %> </p> <p> <%= submit_tag ''Next'' %> </p> ------------------------ _stage2.html.erb <p> Tag line<br /> <%= text_field "coupon","tag_line" %> </p> <p> <%= submit_tag ''Next'' %> </p> -------------------------------------- _stage3.html.erb <p> Price<br /> <%= text_field "coupon", "price" %> </p> <p> <%= submit_tag ''Create'' %> </p> Please tell me where went wrong.? Thanks, Vikas -- Posted via http://www.ruby-forum.com/.