与Rails相关的Ruby实例和全局变量 问题1:

与Rails相关的Ruby实例和全局变量 问题1:,ruby,ruby-on-rails-3,Ruby,Ruby On Rails 3,Rails操作(方法)中实例变量的范围是什么。与服务器的每个连接是否构成控制器的新实例 例如: 用户A加载一个“setter”页面,生成一个名为@randInt的随机实例变量 用户(从其他地方的另一台PC)加载“getter”页面,请求@randInt 用户\u B是否会检索用户\u A设置的@randInt?或者该实例变量对于用户的连接是唯一的 问题2: 问题2与问题1相同,但改用@@randInt。如果问题2的答案是“是的,两个用户都可以看到这个值”,那么在Rails中使用全局变量来存储

Rails操作(方法)中实例变量的范围是什么。与服务器的每个连接是否构成控制器的新实例

例如:

  • 用户A加载一个“setter”页面,生成一个名为
    @randInt
    的随机实例变量
  • 用户(从其他地方的另一台PC)加载“getter”页面,请求
    @randInt
用户\u B是否会检索用户\u A设置的
@randInt
?或者该实例变量对于用户的连接是唯一的

问题2:
问题2与问题1相同,但改用
@@randInt
。如果问题2的答案是“是的,两个用户都可以看到这个值”,那么在Rails中使用全局变量来存储您希望在多个用户之间共享的临时数据是可以接受的做法吗?

问题1:否,实例变量仅在实例中共享,其中“实例”指控制器的实例,因此,这些变量只支持一个请求(因此用户B将收到不同的
@randInt

问题2:
@
变量不是全局变量<代码>@是类变量。正如链接所解释的,不同的机器实例(例如,如果您正在使用FCGI)将不会共享全局(
$
)变量,因此不要使用它们

如果需要全局常量,请在配置中设置它们。全局变量最好留在数据库中(我可以看到它们的用法,例如站点设置,但这些用法似乎最适合与数据库一起使用)


您可以将类变量用作,但同样,您最好使用数据库来存储这样的值,因为您不能保证不会重新加载类(因此重置任何类变量)

我可能不会使用session这个术语,因为它会引起与实际rails会话的混淆。实际上,每个请求都会创建一个新的控制器实例,其中实例变量在请求期间有效。你完全正确,更新了答案以消除任何困惑(希望如此)。