微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将我的rails自定义生成器附加到模型一?

如何解决如何将我的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 举报,一经查实,本站将立刻删除。