在Rails3插件中处理设置的适当方法?

jde*_*eno 1 ruby ruby-on-rails ruby-on-rails-plugins ruby-on-rails-3

我正在为Rails3制作一个插件.我想允许用户覆盖一些设置.目前我在我的插件的Rails :: Engine类中执行此操作,如:

config.my_setting = :default_value unless config.respond_to? :my_setting
Run Code Online (Sandbox Code Playgroud)

这似乎是处理这个问题的错误方法.大多数插件在Rails3中使用是否有更好的方法或约定?

Yeh*_*atz 5

我建议人们在他们的Railtie中为他们的设置创建一个新的设置命名空间:

module MyPlugin
  class Railtie < Rails::Railtie
    config.my_plugin = ActiveSupport::OrderedHash.new

    config.my_plugin.some_default = true
    config.my_plugin.some_other_default = false

    initializer "my_plugin.initialize" do |app|
      app.config.my_plugin # the settings, possibly augmented by the user
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

然后,用户可以设置插件的配置或覆盖其Application类中的默认值.这是Rails在我们内部的Railties中使用的模式.

就像保罗所说的那样,你可以通过创建一个转储初始化器的生成器来使它变得更加容易,该初始化器具有为其使用而注释掉的所有可能的配置设置.