2013-01-11 21 views
2

在我的导航列表中,我有一个选择的下拉框,其中包含管理员专有的所有用户。管理员可以选择一个用户,并通过ajax更新视图以显示所选用户的信息。通过Ajax使用Javascript设置Rails/Ruby变量

的观点与一些更新这样的:

$(#Users).change(function() { 
    $ajax({ 
     ... yada yada update information in view. 

不过,我想实现是,如果我切换到其他视图/ URL(如我的账户html.erb到mygraph.html。 erb)或者刷新我的页面,我希望用户选择下拉框以保持我所做的用户选择。

我想用rails cookies来做到这一点。但我必须重定向到控制器来设置cookie。

我尝试了POST Ajax调用,

$(#Users).change(function() { 
    $.ajax({ 
    ... 
    data: { 
     "<%= cookies[:selected] %>": this.value 

它不工作,但由于某种原因,我已经怀疑,这将是这么简单。

我该如何实施此解决方案?

回答

4

您不必重定向控制器操作。你可以调用控制器动作的ajax调用。您可以在控制器动作设定的cookie如下:

$(function(){ 
    $('#user_select')change(function(){ 
    value = $(this).val() 
    $.post("controller/action",{selected_value : value}, function(data, status){ 
     if(status == "success") 
     { 
     alert(data); 
     } 
    }); 
    return false; 
    }) 
    }) 

控制器:

def action 
    cookies[:name]=params[:selected_value] 
    render :text => "success" 
end 
+0

不错!一个简单的问题,我应该如何将user_select值传递给action? – user1002563

+0

@ user1002563编辑答案 – codeit

+0

渲染是相当侵扰性的,但不可避免的权利?我试图使用render:nothing => true,但它仍显示一条空的消息。我使用了一个渲染json:一些东西,但对我来说这似乎是一个黑客:C。无论如何非常感谢你! – user1002563