1

我正在努力寻找在 Rails 3 中存储一次性用户设置(增值税百分比、标语行。本质上是 1 的东西)的模式。我需要设置具有单个实例的全局站点设置。

理想情况下,我希望答案是设计模式,而不是 gem 或插件(除非有人知道将与 Active Admin 集成的 gem 或插件)

4

2 回答 2

1

一次性设置是什么意思?您是指 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
于 2012-11-24T00:01:44.943 回答
0

一个用于存储键值对的类怎么样?

class Settings < ActiveRecord::Base

  attr_accessible :lookup, :value

  def self.VAT
    return self.find_by_lookup('VAT')
  end

end

然后你可以做@vat = Settings.VAT.value或类似的事情。查找是您内部定义的键。当然,值列必须是所有相同的数据类型,但您可以在 getter 方法(或通过子类)中处理任何必要的转换。

于 2012-11-24T09:46:42.050 回答