Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何通过post在Rails中发送下拉选择并在会话中保留该选择?_Ruby On Rails_Ajax_Session_Post_Cookies - Fatal编程技术网

Ruby on rails 如何通过post在Rails中发送下拉选择并在会话中保留该选择?

Ruby on rails 如何通过post在Rails中发送下拉选择并在会话中保留该选择?,ruby-on-rails,ajax,session,post,cookies,Ruby On Rails,Ajax,Session,Post,Cookies,我正在尝试向Rails站点添加一个简单的特性。将有一个下拉菜单来选择您想要显示时间的时区。一旦您选择了时区,该选择现在需要保持,以便在该会话期间,显示的该用户的任何时间值都在该时区中 我已经有了一个很好的功能,我的日期格式在ApplicationController的帮助器模块中完成,在那里我可以应用时区,它会自动应用到所有显示的日期。然而,我遇到的一个问题是,虽然我需要通过POST发送这些数据,但我也不需要依赖某种后端存储来保持选择。我这样做的网站本质上或多或少只是一个多服务的前端,所以它没有

我正在尝试向Rails站点添加一个简单的特性。将有一个下拉菜单来选择您想要显示时间的时区。一旦您选择了时区,该选择现在需要保持,以便在该会话期间,显示的该用户的任何时间值都在该时区中

我已经有了一个很好的功能,我的日期格式在ApplicationController的帮助器模块中完成,在那里我可以应用时区,它会自动应用到所有显示的日期。然而,我遇到的一个问题是,虽然我需要通过POST发送这些数据,但我也不需要依赖某种后端存储来保持选择。我这样做的网站本质上或多或少只是一个多服务的前端,所以它没有自己的数据库。它只是进行服务调用并显示接收到的数据。这成为一个问题,因为我所看到的大多数会话使用示例都将会话值与从ActiveRecord扩展的模型值进行比较。在这个网站上,甚至没有使用ActiveRecord

我意识到这两件事可能是不相关的,但当所有示例代码将cookie数据与模型数据进行比较时,学习过程会变得更加困难,而实际上我没有持久模型。另外,我仍然不太理解“Rails魔法”,它决定了在params散列中转发什么

那么,有没有一种简单的方法可以让下拉选择仅将选择存储在cookie中,并且该用户的未来渲染可以基于该cookie信息,而无需将cookie数据与某些持久模型数据进行比较


编辑:一位评论员问,是否有原因不能使用AJAX。答案是,除了我以前从未使用过AJAX之外,没有其他原因,所以我可能需要一些解释才能让它工作。我认为AJAX只是一种在不离开页面的情况下进行查询的方法,但是页面在做出选择后无论如何都需要重新加载,更重要的是,它应该使用新的设置重新呈现它以前所在的页面。

您不能只使用AJAX将该值发送到控制器,并像
会话[:drop\u down\u val]那样保存它吗=params[:drop_down]
?这是可能的,但我以前从未接触过AJAX。我几乎是一个为了Ruby而学习Ruby的开发人员,而不是Rails,但现在的工作是指导我进入Rails。所以我知道Ruby、MVC、Rails basics、XHTML和CSS,但AJAX、JSON、Javascript和jQuery对我来说仍然是新鲜事物。您不必使用AJAX来使用会话变量(尽管我建议您了解Rails附带的AJAX优点)。表单提交工作完成后,使用结果设置
会话[:时区]
,然后像在助手方法中那样引用它。你的JS有多好?您可以使用时区设置cookie,然后使用JS读取和更新时间戳。