在模型中使用Rails应用程序配置变量

enR*_*Rai 5 ruby-on-rails

我在rails应用程序中定义了自定义配置变量(APP_CONFIG哈希).好的,现在我如何在模型中使用这些变量?在模型中直接调用APP_CONFIG ['variable']是一种非导轨方式!例如,我可以在没有Rails环境的情况下使用这些模型.然后没有定义APP_CONFIG.

ATM我使用模型观察器并使用实例变量分配全局配置变量,如下所示:

def after_initialize model
  Mongoid.observers.disable :all do
    model.user_id = APP_CONFIG['user_id'])
    model.variable = User.find(model.user_id).variable
  end
end
Run Code Online (Sandbox Code Playgroud)

但这个解决方案看起来像一个猴子补丁.还有更好的方法吗?

或者我应该保持最简单,只需在新应用程序(而不是Rails应用程序)中定义APP_CONFIG哈希?

rub*_*iii 1

我会使用依赖注入。如果您有一个需要各种配置值的对象,您可以通过构造函数注入配置对象:

class Something
  def initialize(config = APP_CONFIG)
    @config = config
  end
end
Run Code Online (Sandbox Code Playgroud)

如果仅单个方法需要配置,只需将其传递给该方法即可:

def something(config = APP_CONFIG)
  # do something
end
Run Code Online (Sandbox Code Playgroud)

Ruby 在调用方法时计算参数。默认值允许您在开发/生产中使用配置对象,而无需手动将其传递给方法,并在测试中使用存根而不是实际配置。

您还可以使用 Rails 配置,而不是定义另一个全局变量/常量:

def something(config = Rails.config)
  # do something
end
Run Code Online (Sandbox Code Playgroud)