0

我正在编写一系列 Rails 生成器,它们将共享几个相同的方法。我想将这些方法抽象为它们自己的模块或类,以便在我的每个生成器中重用(但不会自动触发)。

我最近的尝试是自动加载一个帮助文件,然后包含它:

lib/my_gem/engine.rb

module MyGem
  class Engine < Rails::Engine
    config.autoload_paths += Dir["#{config.root}/lib/helpers/**"]
  end
end

lib/helpers/generators_helper.rb

module MyGem
  module GeneratorsHelper
    def some_method
      # ...
    end
  end
end

lib/generators/my_gem/my_generator.rb

# ...
include MyGem::GeneratorsHelper
# ...

但我会看到类似的东西Error: uninitialized constant MyGem::GeneratorsHelper.

4

1 回答 1

0

我可以通过手动要求文件然后包含模块来完成此操作。这有点难看,但让我无法复制辅助方法:

lib/my_gem/generators/my_generator.rb

require "#{Gem::Specification.find_by_name("my_gem").gem_dir}/lib/helpers/generators_helper.rb"
include MyGem::GeneratorsHelper
于 2014-08-05T20:21:56.963 回答