我正在试验gem开发,现在特别是生成器。到目前为止,我已经成功地创建了两个生成器,它们完美地完成了自己的工作。这两个生成器位于同一目录中。
但是,现在我必须分别调用它们。
我想要做的就是调用一个生成器,让这个生成器调用所有其他生成器。只需要输入
rails g generator_name这将调用x个其他生成器。
有人知道我是怎么做到这一点的吗?
非常感谢您的帮助,谢谢!
发布于 2011-05-06 04:58:01
在生成器中,您可以直接调用
generate "some:generator" # can be anything listed by 'rails g'例如:
module MyGem
class InstallGenerator < Rails::Generators::Base
def run_other_generators
generate "jquery:install" # or whatever you want here
end
end
end顺便说一句,如果你正在使用Rails3gem,这个问题也可以帮助你:
发布于 2012-08-20 03:19:40
另一种可能是使用类似于
invoke 'active_record:model', 'foo bar:string baz:float'它不像generate那样干净,但有一个优点:当您的生成器通过rails destroy调用时,这个调用--就像Thor的其他操作一样--将试图撤销您invoke的生成器的操作。
然而,有一个问题:可能是由于Thors依赖管理,这只对你想要调用的每个生成器起作用一次,这意味着同一生成器的第二个invoke将不会做任何事情。这可以通过使用如下语句来规避
Rails::Generators.invoke 'active_record:model', '...', behavior: behavior而不是。在这种情况下,您必须显式地传递生成器的behavior (这是一个返回:invoke、:revoke等值的方法,这取决于调用生成器的命令-- rails generate、rails destroy、rails update等),以获得与上面相同的结果。如果您不这样做,那么在使用rails destroy运行生成器时,也会执行您使用Rails::Generators.invoke调用的生成器。
或者,您可以坚持使用invoke,并尝试篡改Thors调用系统。另请参阅here示例。
发布于 2011-05-05 12:08:32
生成器是基于雷神的,所以你可以使用apply method。
这就是Rails Templater gem所做的事情。(Here's漫步Rails Templater gem。)
https://stackoverflow.com/questions/5890650
复制相似问题