Ruby on Rails控制器中的@@变量是否特定于用户会话,或者所有用户都会看到相同的值?

时间:2014-03-04 23:07:31

标签: ruby-on-rails ruby ruby-on-rails-3.2

我有一个控制器,其中有一个“无视”动作。该控制器用于设置名为@@ComputedData={}的变量。但是,数据是基于上传应用程序的用户的csv文件计算的。现在用户是要查看他们的特定数据还是@@ComputeData对所有用户都是一样的?有人能解释一下这个概念吗?我真的很不稳定。提前谢谢你,抱歉这个菜鸟问题。

3 个答案:

答案 0 :(得分:4)

小心在Rails中使用类变量。

类变量不会在进程之间共享,因此您将获得不一致的结果

有关详细信息,请查看:

  1. O'Reilly Ruby - Don't Use Class Variables!
  2. Why should we avoid using class variables @@ in rails?
  3. 您始终可以使用类和类方法为所有用户提供相同的数据:

    class Computation
      attr_reader :computed_data
      @computed_data = 3
    end
    

    所以你可以要求Computation.computed_data(将是3),

    Computation.computed_data = 4会为您提供NoMethodError

    如果您在另一方面,如果您希望每个用户computed_data,则应将其保存在ActiveRecord模型中的数据库中(Rails的典型情况)......

答案 1 :(得分:3)

@@ ComputedData是一个类变量。所有用户都会看到相同的数据,所以baaaad的想法。

答案 2 :(得分:1)

请勿将class variables (@@)global variables ($)混淆。 在this post中,您会看到解释以及它们之间的不同。