ruby-on-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
但我无法实现。我尝试覆盖生成器模型类并使用 ahook_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
推荐阅读
- wordpress - 如何更改密码更改电子邮件的内容。这可能吗?
- python - 是否可以在我的烧瓶应用程序中将图形界面集成到网页中?
- python - 在 python 中的 virtualenv 中运行命令
- javascript - 如何在单个标签中使用两个 data-min 和 data-max 属性
- python - 工厂类方法是否违反了 Liskov 替换原则?
- angular7 - 如何在foreach中添加延迟
- python-3.x - 如何显示仪表板
- r - 从几个横截面中提取数据点的子集
- delphi - 如何读取未知大小的未知类型文件
- python - Python - 将不同值的组合计算为总和