我很困惑。
我使用的一个名为 的 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 中。有人有相关经验吗?