Rails:控制器,视图和辅助生命周期

时间:2014-05-03 11:59:10

标签: ruby-on-rails

我想知道是否有任何文件。我相信知道这些对象何时被创建和销毁以及它们是否被重用(如Java servlet)是有帮助的。特别是,我想知道帮手。我假设为每个新请求创建了一个新的控制器实例,对于视图也是如此,但对于助手则不然。在他的tutorial中,Michael Hartl使用SessionsHelper来存储当前用户,这让我觉得帮助生命周期与会话绑定。它是否正确?然后从技术上讲,我可以使用助手存储会话信息,对吗?

2 个答案:

答案 0 :(得分:1)

我的想法是创建辅助方法,就像创建Rails应用程序的每个其他部分一样。随每个请求销毁

你必须记住辅助方法不会“存储”任何会话数据 - 他们只会调用session cookies来显示相关数据:

  

大多数应用程序需要跟踪特定的某些状态   用户。这可以是购物篮的内容或用户ID   当前登录用户的数量。没有会议的想法,   用户必须识别并且可能在每个上进行身份验证   请求。如果是新用户,Rails将自动创建一个新会话   访问应用程序。如果用户,它将加载现有会话   已经使用过该应用程序。

     

会话通常由值的哈希值和会话ID组成,   通常是一个32个字符的字符串,用于标识哈希值。发送的每个cookie   客户端的浏览器包含会话ID。另一种方式   round:浏览器会在每次请求时将其发送到服务器   客户端。在Rails中,您可以使用保存和检索值   会话方法:

这至少向我证明,每次加载“帮助器”时,它实际上都依赖于用户的存储数据(特别是对于会话)。这意味着虽然看起来帮助者的生命周期可能超出每个请求,但它实际上只是依赖于提供的数据

话虽如此,我需要根据benjamin sinclaire的评论阅读如何制作此线程安全等

答案 1 :(得分:1)

基本流程如下:

(request) -- Rack stuff -- Controller instance -- View instance -- (response) 

您在Controller中设置的任何实例变量都可供View使用。那些是线程安全的。另一方面,类变量不是线程安全的。

助手是模块,而不是类,因此它们不是(无法实际)实例化。相反,它们会混合到评估模板的View实例中。同样,实例变量是线程安全的,类变量不是。