Rails自动重载常量破解

时间:2015-04-27 15:18:46

标签: ruby-on-rails

滑轨'恒定的自动重载非常好,非常便于开发。但是,我真的不喜欢为非常小的(例如,一行)顶级类创建一个新文件,只是为了让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定义位置的提示,那将会很好,但据我所知,它没有这个功能。

我是唯一一个被这个问题困扰的人吗?

0 个答案:

没有答案