我正在尝试扩展Rails中的模型生成器(Rails g模型)。基本上,我的生成器应该做与模型相同的事情,但复制2个额外的文件。就这么简单。
我查看了Railscast #218 (http://railscasts.com/episodes/218-making-generators-in-rails-3),它提供了非常丰富的信息,但是我找不到任何关于扩展生成器的信息。
检查rails的源代码,看起来模型生成器在lib/rails/generators/rails/model/model_generator中。定义为Rails::Generators::ModelGenerator.
我试图让我的生成器扩展这个类,但结果是:
Error: uninitialized constant Rails::Generators::ModelGenerator.
并且我尝试要求这个文件不成功。
所以我决定停下来问一下。扩展发电机的正确方法是什么?
看看钩子和调用。
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
-
生成自定义生成器:
rails generate generator my_model
-
打开
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
这适用于铁路引擎。不要忘记添加所需的模板。