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

时间:2011-09-17 09:56:25

标签: ruby ruby-on-rails-3

问题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 个答案:

答案 0 :(得分:2)

问题1 :不,实例变量只在实例中共享,其中'instance'是指控制器的实例,因此这些变量只持续一个请求(因此User_B将收到不同的@randInt)。

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

如果您需要全局常量,请在配置中设置它们。全局变量可能最好留在数据库中(我可以看到它们的用途,例如站点设置,但用途看起来最适合用于数据库)。

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