【问题标题】:How can I have a rails app remember user input without storing data into database如何让 Rails 应用程序记住用户输入而不将数据存储到数据库中
【发布时间】:2013-12-08 06:53:39
【问题描述】:

我有一个关于状态和让网络应用记住用户输入的问题。我觉得最明显的选择是饼干,但我无法完全理解它。让我详细说明我在做什么。

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

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

cookie 是一种方式吗?我对它们和rails没有太多经验,但我遇到了问题。

另一方面,假设您在 amazon.com 上并转到您的购物车...所有这些商品都存储在那里,因为它们存储在 cookie(或缓存?)中,您认为它们是如何存储的?

如何存储像 ["answer1" => :answer, "answer2" => :answer] 这样的对象,然后在回答每个问题后继续附加到该对象?

谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby cookies


    【解决方案1】:

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

    #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]
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-12
        • 2013-12-10
        • 1970-01-01
        • 1970-01-01
        • 2023-03-19
        • 1970-01-01
        • 1970-01-01
        • 2011-06-25
        相关资源
        最近更新 更多