如何解决如何将我的rails自定义生成器附加到模型一?
当前,我创建了一个独立的生成器。当我运行rails g query
时,它可以正常运行并很好地创建文件。
以下代码:
# lib/generators/rails/query_generator.rb
require_relative '../my_lib/named_base'
module Rails
module Generators
class QueryGenerator < MyLib::Generators::NamedBase
source_root File.expand_path('templates',__dir__)
check_class_collision suffix: 'Query'
def create_model_query
return if class_name.blank?
template_file = File.join('app/queries',class_path,"#{file_name}_query.rb")
template 'query.rb.erb',template_file
end
end
end
end
现在,我想在人们运行rails g model
时运行生成器,但我无法实现。
我尝试覆盖生成器模型类,并使用hook_for
来调用它,但是它不起作用。这里的代码:
# lib/generators/rails/model_generator.rb
require "rails/generators"
require "rails/generators/rails/model/model_generator"
require_relative './query_generator'
module Rails
module Generators
class ModelGenerator < ::Rails::Generators::ModelGenerator
hook_for :orm,as: :model,in: :rails do |instance,model|
instance.invoke Rails::Generators::QueryGenerator,[ instance.name ]
end
end
end
end
希望您能帮助我。谢谢!
解决方法
最后,我找到了解决方案!借助Railtie,我可以实现与Rails模型生成器关联的预期行为。
# lib/my_gem.rb
require ...
require 'my_gem/railtie' if defined?(Rails)
# lib/my_gem/railtie.rb
require 'rails/railtie'
module ActiveModel
class Railtie < Rails::Railtie
generators do |app|
Rails::Generators.configure! app.config.generators
require_relative '../generators/model_generator'
end
end
end
# lib/generators/model_generator.rb
require 'rails/generators'
require 'rails/generators/rails/model/model_generator'
require_relative 'rails/query_generator'
module Rails
module Generators
class ModelGenerator
hook_for :query,type: :boolean,default: true
end
end
end
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。