滑轨'恒定的自动重载非常好,非常便于开发。但是,我真的不喜欢为非常小的(例如,一行)顶级类创建一个新文件,只是为了让Rails知道在哪里寻找一个const定义。
我浏览了ActiveSupport::Dependencies
的代码并提出了以下黑客攻击(将其放入初始化程序中):
module CustomLoader
ConstMapper = {
# what constants are defined in what files
'lib/models.rb' => [
:Person,
:Affiliation,
:NamedAuthority
]
}.each_with_object({}) do |(k, vs), acc|
vs.each { |v| acc[v] = Rails.root.join(k).to_s }
end
def const_missing(const_name)
if path = ConstMapper[const_name]
if ActiveSupport::Dependencies.require_or_load(path, const_name)
return const_get(const_name)
end
end
super(const_name)
end
end
Object.extend CustomLoader
这似乎是正常的。有什么我可以忽略的吗?这会破坏什么吗?是否有任何我忽略的解决方法?
如果AS::Dependencies
有某种方法可以提供有关const定义位置的提示,那将会很好,但据我所知,它没有这个功能。
我是唯一一个被这个问题困扰的人吗?