与Rails相关的Ruby实例和全局变量

问题1:

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

例如:

> User_A加载’setter’页面,导致生成一个名为@randInt的随机实例变量.
> User_B(来自其他地方的其他PC)加载“getter”页面,请求@randInt.

User_B将检索User_A设置的@randInt吗?或者该实例变量是User_A连接的唯一变量?

问题2:

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

最佳答案 问题1:不,实例变量仅在实例中共享,其中’instance’是指控制器的实例,因此这些变量只持续一个请求(因此User_B将接收不同的@randInt).

问题2 :: @@变量不是全局变量,$ variables are.@@是类变量.正如链接所解释的那样,不同的机器实例(例如,如果您使用FCGI)将不共享全局($)变量,因此不要使用它们.

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

你可以使用类变量作为persistant instance variables,但你可能再次使用数据库来存储这些值,因为你不能保证你的类被重新加载(因此重置任何类变量).

点赞