【问题标题】:Rails: how to extend a generator?Rails:如何扩展生成器?
【发布时间】:2013-01-08 00:27:49
【问题描述】:

我正在尝试在 Rails ( rails g model ) 中扩展模型生成器。基本上我的生成器应该和模型一做同样的事情,但是复制 2 个额外的文件。就这么简单。

我查看了 Railscast #218 (http://railscasts.com/episodes/218-making-generators-in-rails-3),它提供了非常丰富的信息,但我找不到任何关于扩展生成器的信息。

查看rails的源码,模型生成器在lib/rails/generators/rails/model/model_generator.rb中定义为Rails::Generators::ModelGenerator。

我试图让我的生成器扩展这个类,但结果是:

Error: uninitialized constant Rails::Generators::ModelGenerator.

我尝试要求此文件没有成功。

所以我决定在这里停下来问问。扩展生成器的正确方法是什么?

【问题讨论】:

  • 您阅读过本指南吗? edgeguides.rubyonrails.org/generators.html
  • @Mik_Die 是的,但它没有提到任何关于扩展生成器的内容。它确实提到了生成方法,但这不是我想要的。示例:我想接受模型生成器接受的所有参数。

标签: ruby-on-rails ruby-on-rails-3


【解决方案1】:

看看钩子和调用。

class MyGenerator < Rails::Generators::Base
  def create_my_file
    # Do your generators stuff
    create_file "config/initializers/my.rb", "# Add content here"
    # Create model
    invoke("model", ["model_name", "arg1", "arg2"])
  end
end

希望对您有所帮助。

【讨论】:

    【解决方案2】:
    1. 生成您的自定义生成器:

      rails generate generator my_model
      
    2. 打开lib/generators/my_model/my_model_generator.rb并将其更改为:

      require 'rails/generators/active_record/model/model_generator'
      
      class MyModelGenerator < ActiveRecord::Generators::ModelGenerator
        source_root File.expand_path('../templates', __FILE__)
      end
      

    这适用于 Rails 引擎。不要忘记添加所需的模板。

    【讨论】:

      猜你喜欢
      • 2018-05-12
      • 2016-01-15
      • 2019-03-30
      • 1970-01-01
      • 1970-01-01
      • 2022-12-03
      • 1970-01-01
      • 1970-01-01
      • 2016-05-08
      相关资源
      最近更新 更多