ruby-on-rails - Ruby on Rails Controller 中的@@variables 是特定于用户 session 的,还是所有用户都会看到相同的值?

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

我有一个 Controller ,其中有一个“无 View ”操作。该 Controller 用于设置名为 @@ComputedData={} 的变量。但数据是根据应用程序用户上传的 csv 文件计算的。现在用户会看到他们的特定数据还是 @@ComputeData 对所有用户都一样?有人可以向我解释这个概念吗?我真的很犹豫。预先感谢您,对于菜鸟问题​​深表歉意。

最佳答案

在 Rails 中使用类变量要小心。

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

有关更多信息,请查看:

  1. O'Reilly Ruby - Don't Use Class Variables!
  2. Why should we avoid using class variables @@ in rails?

您始终可以使用类和类方法为所有用户提供相同的数据:

class Computation
  attr_reader :computed_data
  @computed_data = 3
end

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

但是 Computation.computed_data = 4 会给你一个 NoMethodError

如果你在另一边,如果你想要每个用户的 computed_data,你应该将它保存在 ActiveRecord 模型中的数据库中(Rails 的典型情况)......

关于ruby-on-rails - Ruby on Rails Controller 中的@@variables 是特定于用户 session 的,还是所有用户都会看到相同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22185121/

相关文章:

ruby-on-rails - respond_to block 总是渲染 html

ruby-on-rails - 如何继续将 Rails 2 项目升级到 Rails 3+?

ruby-on-rails - 什么时候执行 ActiveRecord 查询?

ruby-on-rails - 设计:可内存意味着last_sign_in_at不会由可跟踪的对象更新

html - rails : refresh page without hitting application during development

Ruby:转换哈希键

ruby-on-rails - Rail 4 中将日期增加一年。未定义方法 `+' for nil :NilClass

ruby - 加载 YAML 而不扩展标签?

ruby-on-rails - 设计中未初始化的常量 ActiveSupport::SecureRandom

passenger - Authlogic 不适用于我的 Rails 3.2 应用程序