2012-01-31 71 views
1

我有一个类变量,我想从一个initilizer中设置,并从那时起保留值。下面的例子仅适用于第一页加载。有一个更好的方法吗?如何在Rails中跨页加载持久化Ruby类变量?

应用程序/模型/ token.rb

class Token  
    class << self 
    attr_accessor :salt 
    end 
end 

配置/ initilizers/token.rb

Token.salt = "savory hash" 

回答

4

在开发模式中,您的类将重新加载每个请求,因此在应用程序启动时初始化程序中设置的值在第一次请求后重新加载时不会持续存在。 (在您的development.rb中“config.cache_classes = false”的结果)。

但是,如果你想设置一个初始值,并把它发展方式坚持,你可以将其添加为一个常数:

initializers.rb

SALT='savory_hash' 

或作为应用程序配置变量:

application.rb中

module YourAppsName 
    class Application < Rails::Application 
    config.token_salt = "savory_hash" 
    end 
end 

whic^h是随时随地访问的应用程序有:

Rails.application.config.token_salt 

当然,如果你在你的环境中启用类缓存,你会发现,你的变量的值将持续而不做上述的事情。

0

你可以试试,或者甚至在自己的表在会话变量,缓存存储它们(一个参考表)。