我有一个控制器,其中有一个“无视”动作。该控制器用于设置名为@@ComputedData={}
的变量。但是,数据是基于上传应用程序的用户的csv文件计算的。现在用户是要查看他们的特定数据还是@@ComputeData
对所有用户都是一样的?有人能解释一下这个概念吗?我真的很不稳定。提前谢谢你,抱歉这个菜鸟问题。
答案 0 :(得分:4)
小心在Rails中使用类变量。
类变量不会在进程之间共享,因此您将获得不一致的结果。
有关详细信息,请查看:
您始终可以使用类和类方法为所有用户提供相同的数据:
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中,您会看到解释以及它们之间的不同。