【发布时间】:2015-02-20 16:28:14
【问题描述】:
我有一个可以为 ActiveRecord 模型添加特定功能的 gem。我希望这个功能的一些参数是可修改的,无论是在全局级别,还是在将我的 gem 添加到每个模型时,以防某些模型需要不同的设置。
我正在这样做:
module Mygem
@@config = nil
def self.config(options={})
defaults = {some_key: default_value}
@@config ||= defaults
@@config = @@config.merge(options)
@@config
end
module ClassMethods
def has_something_my_gem_adds(options={}) # method you call to add this functionality to your model
options = Mygem.config.merge(options)
# add functionality to the model
define_method(:my_gem_options) { options } # I don't think this is the best way to store this, but I didn't find a better one.
end
def does_something
if self.my_gem_options[:some_key]
end
end
end
end
我对创建“my_gem_options”方法不是很满意,但是我还没有找到一种很好的方法来存储该模型的配置信息,这样它们就可以用于所有我的 gem 中的方法。
最好的方法是什么?
此外,我也不知道为我的 gem 存储“全局”配置的最佳方式是什么,我将其存储在模块本身的 @@config 中。有没有更好的办法?
【问题讨论】:
标签: ruby-on-rails configuration gem