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上的开发环境中它每次都被调用?
怎么可能?
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上的开发环境中它每次都被调用?
怎么可能?
编辑:实例变量应该只保留在每个请求的上下文中,因此每次发出请求时都应该重新初始化它。在您的控制台中,当您这样做时t = Test.new
,您会创建该类的单个实例,这就是为什么load_user_env
只被调用一次的原因。您可以使用一个类变量@@setting
,它应该在 的请求和实例中是持久的Test
,但我不确定在开发模式下重新加载类会如何影响它。
Rails 在每次请求时都会在开发模式下重新加载类。在控制台中,除非您调用reload!
.
如果你config.cache_classes = true
为你的开发环境设置,它不应该再重新加载它们,它也应该让它更快。缺点是每次进行更改时都必须重新启动服务器。