如何让rails应用程序记住用户输入而不将数据存储到数据库中

时间:2013-12-07 22:04:00

标签: ruby-on-rails ruby cookies

我有一个处理状态的问题,并且有一个Web应用程序记住用户的输入。我觉得最明显的选择是饼干,但我不能完全围绕它。让我详细说明我正在做什么。

我正在制作一个简单的网络应用,供用户进行多项选择测验。如果用户开始测验并且是一页的问题,他们会选择他们的答案并点击“提交”。之后,调用我的quizzes_controller中的check_answer方法,然后将用户定向到测验的第二个问题。(http:localhost / quizzes / 1?q = 2)

我的目标是在测验结束时,我们可以计算结果。当用户完成提交时,我需要访问用户对问题1,2,3等的回答。

Cookie是否可行?我对它们和rails没有太多经验,但我遇到了问题。

另一方面,让我们说你在amazon.com上并转到你的购物车......所有这些项目都存储在那里,因为它们存储在一个cookie(或缓存?)中你怎么认为他们存储了?

如何存储对象,[“answer1”=> :回答,“answer2”=> :回答]然后在每个问题被回答后继续追加对象?

谢谢!

2 个答案:

答案 0 :(得分:2)

听起来“会话”是完美的区域:

#In this case, the :answers session variable is an array
session[:answers] = []

session[:answers][0] = "first answer"

#on the next page 
session[:answers][1] = "second answer" 

#on the next page after that:
session[:answers][2] = "third answer"

#what the session[:answers] array looks like
#after three questions have been answered and stored: 
["first answer", "second answer", "third answer"]

要回答第二个问题,您还可以在会话中存储哈希,如下所示:

session[:answers] = {}
session[:answers]["answer1"] = "can be anything, string, symbol, another hash, array, int"
#next page:
session[:answers]["answer2"] = :answer
#what session[:answers] looks like on the third page:
{ 
  "answer1" => "can be anything, string, symbol, another hash, array, int", 
  "answer2" => :answer 
}

重要的是要注意session本身只是一个哈希,它在页面请求之间保留状态(这个状态实际上本身存储在引擎盖下的cookie中,但你真的不必担心这个太多了...除非您在加密和Web应用程序安全方面经验丰富,否则不要将敏感数据存储在会话变量中......即便如此,仍然没有。)

因此,您可以在会话变量中存储您想要的任何内容:

session[:some_string] = "some string"
session[:some_hash] = { :value1 => "value 1", :value2 => 42 }
session[:some_number] = 42
session[:some_array] = ["how now brown cow", 15, "blue", :foom]

答案 1 :(得分:0)

您也可以尝试使用Cookie。虽然如果您只需要当前会​​话的数据,第一个给出的答案是首选答案:)