如何让Rails默认生成器调用自定义生成器

4

为了明确,这不是我想要的:

  • 让我的自定义生成器调用默认的Rails生成器
  • 用自己的生成器替换默认的Rails生成器

我想做的是在调用以下命令时自动调用我的生成器:

rails generate scaffold User name age:integer

我不是在编写测试替代方案或类似的东西,这是完全自定义的。我发现关于生成器的所有信息都涉及到前两种情况之一,但并不是我想要做的。当我找到hook_for时,我立即认为那正是我需要的,但它似乎做的是相反的事情——在我的自定义生成器内部调用另一个Rails生成器(如果我想为我的自定义生成器创建一个测试文件,我会调用hook_for :test_framework,然后在某个地方定义一个TestUnit::MyCustomGenerator类)。

我想我可以对默认的脚手架生成器进行猴子补丁来调用我的生成器,但那感觉很肮脏。我研究了一些类似的gems,如https://github.com/Skalar/i18n-yaml-generator,但尝试将其转换为使用初始化程序和lib/generators并不起作用。脚手架生成器运行了,但我的没有被调用。


1
不,最终我创建了一个新的自定义生成器,它会调用Rails的默认生成器和我的生成器。例如,rails g localized_scaffold User name 首先调用 scaffold User name,然后运行我的本地化生成代码。 - Rob Cameron
1个回答

0

对我来说,它在lib/generators/目录下有效。

$ rails g generator scaffold
      create  lib/generators/scaffold
      create  lib/generators/scaffold/scaffold_generator.rb
      create  lib/generators/scaffold/USAGE
      create  lib/generators/scaffold/templates
$ rails g scaffold
Usage:
  rails generate scaffold NAME [options]
....
        what/will/it/create

http://guides.rubyonrails.org/generators.html#generators-lookup

另一种方法可能是 :)

  • fork railties gem
  • 覆盖 Rails::Generators::ScaffoldGenerator 类以符合您的喜好
  • 本地安装或在 Gemfile 中指定源路径

如果“完全自定义”,公平地称其为不同的名称,不是吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接