Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.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 Rails有办法在请求之间重置类变量吗?_Ruby On Rails_Initialization_Lifecycle_Class Variables - Fatal编程技术网

Ruby on rails Rails有办法在请求之间重置类变量吗?

Ruby on rails Rails有办法在请求之间重置类变量吗?,ruby-on-rails,initialization,lifecycle,class-variables,Ruby On Rails,Initialization,Lifecycle,Class Variables,我意识到,它们可以在一个请求中被修改,并且在下一个请求中仍然会被修改。这似乎是不受欢迎的行为,而且可能是一个普遍存在的问题,因为它适用于所有类变量/属性的使用 Rails是否提供了一种机制来清除对类级状态的更改(例如重置为默认值),从而使每个请求都以原始状态启动 如果没有,是否可以添加一种初始化类变量的方法,该方法将在每个请求开始时重新应用?这可以与线程安全存储相结合,使类变量的问题小得多。可能的修改 更新: 正如我在中所描述的,引起我注意的具体案例是,我正在按每个用户设置ActiveResou

我意识到,它们可以在一个请求中被修改,并且在下一个请求中仍然会被修改。这似乎是不受欢迎的行为,而且可能是一个普遍存在的问题,因为它适用于所有类变量/属性的使用

Rails是否提供了一种机制来清除对类级状态的更改(例如重置为默认值),从而使每个请求都以原始状态启动

如果没有,是否可以添加一种初始化类变量的方法,该方法将在每个请求开始时重新应用?这可以与线程安全存储相结合,使类变量的问题小得多。可能的修改

更新:


正如我在中所描述的,引起我注意的具体案例是,我正在按每个用户设置ActiveResource::Base.user和密码。如果我未能重置它们,那就意味着代表一个用户的REST请求将在后续页面加载中使用另一个用户的凭据进行

出于好奇,你能举个具体的例子说明你为什么要这样做吗?从表面上看,这听起来像是您在请求对变量进行更改,所以Rails正在按照您的要求进行操作

就答案而言,有几个选项:

  • 变量没有自动“切换回默认值”的行为,没有
  • 您可以在每个控制器操作结束时手动重置要执行此操作的值
  • 您可以编写一个模块来实现这一点(称之为“acts_as_resetable”),然后将该模块包含在需要此功能的类中

扩展class_属性似乎是一种很好的方法,因为它已经提供了我想要的行为(可继承的类级属性)。它可以被传递一个默认值,它将在每次请求时保存并重置该值,并且它可以使用Thread.current,正如@kandaboggu在另一篇文章中建议的那样,以便在出现问题时保证线程安全。