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

问题描述 投票:0回答:2

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

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

我想要做的是当我调用时自动调用我的生成器:

rails generate scaffold User name age:integer

我不是在编写测试替换或任何东西,它完全是自定义的。我找到的有关生成器的所有信息都涉及前两种情况之一,但不是我想要做的。当我发现

hook_for
时,我立即认为这正是我所需要的,但它似乎做了相反的事情——从我的自定义生成器内部调用另一个 Rails 生成器(如果我想要为我的自定义生成器创建一个测试文件,我调用
hook_for :test_framework
,然后在某处定义
TestUnit::MyCustomGenerator
类)。

我想我可以修补默认的脚手架生成器来调用我的,但这感觉很脏。我研究了一些类似 https://github.com/Skalar/i18n-yaml-generator 的 gem,但尝试将其转换为使用初始化器,而

lib/generators
对我不起作用。 scaffold_generator 运行,但我的永远不会被调用。

ruby-on-rails ruby generator
2个回答
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

另一种方式可能是:)

  • 叉轨宝石
  • 根据您的喜好覆盖 Rails::Generators::ScaffoldGenerator 类
  • 本地安装或在Gemfile中指定源路径

如果“完全是定制的”,那么用不同的名称来称呼它也是公平的,不是吗?


0
投票

我和你有类似的需求,我想自动从脚手架生成器调用pundit生成器。

除此之外,我还在专用的 gem 中设置了各种生成器模板。为了让 Rail Scaffold 生成器调用 pundit 策略生成器,我在 gem 的railtie.rb 中添加了一行:

module MyGenerator
  class Railtie < ::Rails::Railtie
    config.app_generators do |g|
      g.templates.unshift File::expand_path('../../templates', __FILE__)
    end

    Rails::Generators::ScaffoldGenerator.hook_for :pundit, as: :policy, type: :boolean
  end
end
© www.soinside.com 2019 - 2024. All rights reserved.