0
class Test
  def settings
   @setting ||= load_user_env
  end

  def load_user_env
   {one: 'Test'}
  end
end


t = Test.new
t.settings
t.settings

在rails控制台load_user_env方法中调用一次,但在WEBrick上的开发环境中它每次都被调用?

怎么可能?

4

1 回答 1

1

编辑:实例变量应该只保留在每个请求的上下文中,因此每次发出请求时都应该重新初始化它。在您的控制台中,当您这样做时t = Test.new,您会创建该类的单个实例,这就是为什么load_user_env只被调用一次的原因。您可以使用一个类变量@@setting,它应该在 的请求和实例中是持久的Test,但我不确定在开发模式下重新加载类会如何影响它。

Rails 在每次请求时都会在开发模式下重新加载类。在控制台中,除非您调用reload!.

如果你config.cache_classes = true为你的开发环境设置,它不应该再重新加载它们,它也应该让它更快。缺点是每次进行更改时都必须重新启动服务器。

于 2013-03-06T15:38:40.113 回答