3

我很困惑。

我使用的一个名为 的 gemrailsy_backbone提供了甜美的命名空间生成器。我可以从命令行调用它们,

$ rails g backbone:model widget

现在,是我制作甜蜜生成器的时候了,但我在命名空间方面遇到了麻烦。我已经完成了我的研究,我读过这个这个,甚至这个。我最终得到的结构是这样的:

lib/generators/
└── marionette
    └── model
        ├── model_generator.rb
        ├── templates
        └── USAGE

的内容model_generator.rb是,

module Marionette
  module Generators
    class ModelGenerator < Rails::Generators::NamedBase
      source_root File.expand_path('../templates', __FILE__)
    end
  end
end

这反映了我读过的所有例子。为了比较,这里是gemlib/generators的部分树:railsy_backbone

generators/
└── backbone
    ├── bob
    │   ├── bob_generator.rb
    │   └── templates
    │       └── model.coffee
    ├── helpers.rb
    ├── model
    │   ├── model_generator.rb
    │   └── templates
    │       └── model.coffee

我实际上添加了自己,当我运行无参数backbone:bob时,它随后显示在命名空间主干下的生成器列表中。rails g这里还有 的内容model_generator.rb

require 'generators/backbone/helpers'

module Backbone
  module Generators
    class ModelGenerator < Rails::Generators::NamedBase
      include Backbone::Generators::Helpers

      source_root File.expand_path("../templates", __FILE__)

      // the implementation

    end
  end
end

我可以看到我的代码和他们的代码之间的唯一区别是他们将生成器打包在一个 gem 中。我的生成器位于我目前正在开发的 rails 应用程序中。现在我已经放弃了,我只想制作一堆顶级生成器。最终,当我准备好使用它们时,我会将它们打包为 gem 并安装它。我希望这会奏效。但是,我真的很想知道如何命名生成器而不让它们存在于 gem 中。有人有相关经验吗?

4

1 回答 1

2

利用:

$ rails generate generator your_gem_name/generator_name

然后检查:

$ rails generate your_gem_name:generator_name --help

于 2016-11-23T10:50:34.313 回答