레일 커스텀 생성기를 모델 1에 어떻게 부착합니까?
rails g query
를 실행하면 작동하고 파일을 잘 만듭니다.여기 그 코드:
# lib/generators/rails/query_generator.rb
require_relative '../my_gem/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/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 의 도움으로 레일 모델 생성기에서 예상한 동작 후킹을 달성할 수 있었습니다.
# 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
Reference
이 문제에 관하여(레일 커스텀 생성기를 모델 1에 어떻게 부착합니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/agustincchato/how-do-i-attach-my-rails-custom-generator-to-the-model-one-3b0j텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)