ajax - Rails - Session Variable Does Not Persist -


i want save state of side-menu in rails session variable, if user collapses side-menu, collapsed state persist when view changed. have js set uncollapsed state send "0" through controller, , if side menu in collapsed state, ajax send "1" through controller action. if controller action receives "1", want session variable set in app.

i have ajax request respective controller action, , collapsed side-nav sending "1" through successfully, session variable not seem persist. here see in console when side-nav collapsed:

console: (when side-nav collapsed)

started post "/dashboard/side_nav_state" 10.0.2.2 @ 2015-06-02 15:58:08 +0000 processing dashboardcontroller#side_nav_state */*   parameters: {"hide_side_nav"=>"1"} completed 200 ok in 2ms (views: 0.2ms | activerecord: 0.0ms) 

(when side-nav expanded)

started post "/dashboard/side_nav_state" 10.0.2.2 @ 2015-06-02 16:02:56 +0000 processing dashboardcontroller#side_nav_state */*   parameters: {"hide_side_nav"=>"0"} completed 200 ok in 2ms (views: 0.2ms | activerecord: 0.0ms) 

javascript:

the sendsidenav(); function sends 1 or 0 through controller. can see, collapsedsidenav(); function sends 1. if @ sendsidenav(); function can see 1 passed through data key value pair in ajax request.

// collapsible side-nav functionality function collapsedsidenav(){   $('.side-nav').toggle(300);   $('#collapse-side-nav').css('display', 'none');   $('#expand-side-nav').css('display', 'inherit');   $('.container').animate({     'padding-left' : 0   }, "slow");   $('.row').css({     'max-width' : '98%',     'margin-left' : '1.15rem'   });   sendsidenavstatus(1); };  // expandable side-nav functionality function expandedsidenav(){   $('.side-nav').toggle(325);   $('#expand-side-nav').css('display', 'none');   $('#collapse-side-nav').css('display', 'inherit');   $('.container').animate({     'padding-left' : 200   }, "slow");   $('.row').animate({     'max-width' : '95%',     'margin-left' : 'auto'   });   sendsidenavstatus(0); };  // sends state of side-menu (if not default) controller can stored in session // 1 true, , 0 false. function sendsidenavstatus(trueorfalse){   $.ajax({     url: '/dashboard/side_nav_state',     method: 'post',     data: {hide_side_nav: trueorfalse}   }); };  // dom events collapsing , expanding side-nav $('#collapse-side-nav').click(function() {   collapsedsidenav(); }); $('#expand-side-nav').click(function() {   expandedsidenav(); }); 

routes

post 'dashboard/side_nav_state' 

controller action

def side_nav_state     session[:hide_side_nav] = params[:hide_side_nav] == "1"      render json: {success: true} end 

edit:

i should note of happening in dashboard controller. want session persist regardless of controller in. possible? know cannot route application controller why set logic dashboard controller. not sure solution here.

for else ends having problem , can't find answer, have come conclusion on how resolve problem.

i have found rails sessions used backend logic (user authentication, user preferences, etc etc). problem code above my javascript did not receive session variable anywhere.. session variable setting correctly , persisting, because needed javascript acted upon session variable, having variable kind of moot point.

one solution me set post end point , create second ajax request. create lot of code including end point, , controller action, along javascript.

because rails doesn't provide way have javascript interact session variables, particular problem decided better handle problem 100% on client side , create browser cookie. used cookie.js library , set cookie accordingly. finalized code ended looking this:

javascript:

$(document).ready(function(){   cookies.get();   initializesidenav(); });  // checks current status of side menu function initializesidenav() {   if (cookies.get("collapsed-side-nav") === "true") {     collapsedsidenav();   } }  // collapsible side-nav functionality function collapsedsidenav(){   $('.side-nav').toggle(300);   $('#collapse-side-nav').css('display', 'none');   $('#expand-side-nav').css('display', 'inherit');   $('.container').animate({     'padding-left' : 0   }, "slow");   $('.row').css({     'max-width' : '98%',     'margin-left' : '1.15rem'   });   cookies.set('collapsed-side-nav', true, {path: '/'})   console.log(cookies.get()); };  // expandable side-nav functionality function expandedsidenav(){   $('.side-nav').toggle(325);   $('#expand-side-nav').css('display', 'none');   $('#collapse-side-nav').css('display', 'inherit');   $('.container').animate({     'padding-left' : 200   }, "slow");   $('.row').animate({     'max-width' : '95%',     'margin-left' : 'auto'   });   cookies.set('collapsed-side-nav', false, {path: '/'});   console.log(cookies.get()); };  // dom events collapsing , expanding side-nav $('#collapse-side-nav').click(function() {   collapsedsidenav(); }); $('#expand-side-nav').click(function() {   expandedsidenav(); }); 

Comments

Popular posts from this blog

python - TypeError: start must be a integer -

c# - DevExpress RepositoryItemComboBox BackColor property ignored -

django - Creating multiple model instances in DRF3 -