首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让生成器调用Rails3中的其他生成器

如何让生成器调用Rails3中的其他生成器
EN

Stack Overflow用户
提问于 2011-05-05 06:34:30
回答 4查看 3.5K关注 0票数 14

我正在试验gem开发,现在特别是生成器。到目前为止,我已经成功地创建了两个生成器,它们完美地完成了自己的工作。这两个生成器位于同一目录中。

但是,现在我必须分别调用它们。

我想要做的就是调用一个生成器,让这个生成器调用所有其他生成器。只需要输入

代码语言:javascript
复制
rails g generator_name

这将调用x个其他生成器。

有人知道我是怎么做到这一点的吗?

非常感谢您的帮助,谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-05-06 04:58:01

在生成器中,您可以直接调用

代码语言:javascript
复制
generate "some:generator" # can be anything listed by 'rails g'

例如:

代码语言:javascript
复制
module MyGem
  class InstallGenerator < Rails::Generators::Base

    def run_other_generators
      generate "jquery:install" # or whatever you want here
    end

  end
end

顺便说一句,如果你正在使用Rails3gem,这个问题也可以帮助你:

Rails 3 generators in gem

票数 23
EN

Stack Overflow用户

发布于 2012-08-20 03:19:40

另一种可能是使用类似于

代码语言:javascript
复制
invoke 'active_record:model', 'foo bar:string baz:float'

它不像generate那样干净,但有一个优点:当您的生成器通过rails destroy调用时,这个调用--就像Thor的其他操作一样--将试图撤销您invoke的生成器的操作。

然而,有一个问题:可能是由于Thors依赖管理,这只对你想要调用的每个生成器起作用一次,这意味着同一生成器的第二个invoke将不会做任何事情。这可以通过使用如下语句来规避

代码语言:javascript
复制
Rails::Generators.invoke 'active_record:model', '...', behavior: behavior

而不是。在这种情况下,您必须显式地传递生成器的behavior (这是一个返回:invoke:revoke等值的方法,这取决于调用生成器的命令-- rails generaterails destroyrails update等),以获得与上面相同的结果。如果您不这样做,那么在使用rails destroy运行生成器时,也会执行您使用Rails::Generators.invoke调用的生成器。

或者,您可以坚持使用invoke,并尝试篡改Thors调用系统。另请参阅here示例。

票数 9
EN

Stack Overflow用户

发布于 2011-05-05 12:08:32

生成器是基于雷神的,所以你可以使用apply method

这就是Rails Templater gem所做的事情。(Here's漫步Rails Templater gem。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5890650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档