Ruby/Rails 类变量何时初始化?

0ll*_*cks 1 ruby initialization ruby-on-rails class-variables

我目前面临的问题是,我的所有对象都使用具有“相同”初始值的实例变量,而我只读了这个。

def initialize
    @available_ids = read_only_value
end
Run Code Online (Sandbox Code Playgroud)

但棘手的事情来了:这个“read_only_value”是从 API 检索的。为了简单起见,我们假设该值是一个整数数组,并且每月更改一次。

但我不想通过每次创建对象时检索值来拒绝 API。如果我改用类变量怎么办?

class Foo
   @@available_ids = read_only_value
   def initialize
      @available_ids = @@available_ids //weird but let's go with it
   end
end
Run Code Online (Sandbox Code Playgroud)

我认为这将解决 API 垃圾邮件的问题,因为它仅在变量初始化后执行...

但这种情况什么时候发生呢?当我启动 Rails 应用程序时,当我创建第一个对象时?它会更新吗?由于该值每月更改一次,我如何获取更新?

PS:我想最好的选择是将 ids 保存在数据库中,并偶尔或按需检查 ids。

Ale*_*kin 5

它发生在类加载时(即:Rails 启动期间。)

\n\n

另外,您不需要\xe2\x80\x99t 类变量。类实例变量就足够了:

\n\n
class Foo\n   @available_ids = read_only_value\n   def initialize\n      @available_ids = self.class.instance_variable_get :@available_ids\n   end\nend\n
Run Code Online (Sandbox Code Playgroud)\n