我正在努力寻找在 Rails 3 中存储一次性用户设置(增值税百分比、标语行。本质上是 1 的东西)的模式。我需要设置具有单个实例的全局站点设置。
理想情况下,我希望答案是设计模式,而不是 gem 或插件(除非有人知道将与 Active Admin 集成的 gem 或插件)
我正在努力寻找在 Rails 3 中存储一次性用户设置(增值税百分比、标语行。本质上是 1 的东西)的模式。我需要设置具有单个实例的全局站点设置。
理想情况下,我希望答案是设计模式,而不是 gem 或插件(除非有人知道将与 Active Admin 集成的 gem 或插件)
一次性设置是什么意思?您是指 API 密钥和环境变量之类的东西吗?
如果是这样,那么一个好的做法是使用 ENV 哈希,并在环境文件中设置 ENV 变量(如下所述)。
为需要在您的目录.rb
中设置的每个单独的 gem(或任意实体)创建一个文件。config/initializers/
例如,当使用条纹时,我创建了config/initializers/stripe.rb
如下所示:
Rails.configuration.stripe = {
:publishable_key => ENV['STRIPE_PUBLISHABLE_KEY'],
:secret_key => ENV['STRIPE_SECRET_KEY']
}
Stripe.api_key = Rails.configuration.stripe[:secret_key]
这会在我的条带 gem 中设置初始设置,并从 ENV 哈希中提取变量值。
要在 ENV 哈希中设置变量,您可以在config/environments
目录中进行。在该目录中,您将拥有三个不同的文件:config/environments/test.rb
, config/environments/development.rb
, config/environments/production.rb
. 在 ENV 哈希中设置变量(如下所示)。
AppName::Application.configure do
# Set Stripe API Key
ENV['STRIPE_SECRET_KEY'] = "sk_test_key"
ENV['STRIPE_PUBLISHABLE_KEY'] = "pk_test_key"
...
end
一个用于存储键值对的类怎么样?
class Settings < ActiveRecord::Base
attr_accessible :lookup, :value
def self.VAT
return self.find_by_lookup('VAT')
end
end
然后你可以做@vat = Settings.VAT.value
或类似的事情。查找是您内部定义的键。当然,值列必须是所有相同的数据类型,但您可以在 getter 方法(或通过子类)中处理任何必要的转换。