Мы на Rails 5, и у нас есть процесс, который мы пытаемся автоматизировать, который включает в себя создание нескольких моделей. Мы сделали собственный генератор, который, между прочим, обрабатывает это.
Первый шаг создает некоторые файлы, которые нам нужны, и работает великолепно, однако мы начали связывать вещи и заметили нечто довольно странное:
Если мы запускаем invoke model some_args
более одного раза, второй run ничего не делает и завершает работу с кодом состояния 0. Когда это происходит, мы находимся где-то в слое Rack, однако, похоже, что если мы изменим invoke
на другой генератор, он будет работать нормально. выполнить генератор:
`rails g model`
Вот код:
require "rails/generators"
require_relative "helpers/scaffold_generator_helper"
module ActiveCsv
class ModelScaffoldGenerator < Rails::Generators::NamedBase
desc <<~DESCRIPTION
This Generator takes a file containing a class inheriting from ActiveCsv
and produces 3 models and migrations (SourceModel, DestinationModel, FailedImportModel)
based on the configurations within the object
DESCRIPTION
def load_object_params
@helper = ActiveCSVScaffoldGeneratorHelper.new(name)
@params = @helper.extract_parameters
puts @params
end
def handle_source_model
case self.behavior
when :invoke
args = @helper.generate_source_model_options
created_files = invoke("model", args)
created_class_name = created_files[0][0][0]
created_model_path = created_files[0][2]
inject_into_class(created_model_path, created_class_name) do
" acts_as_copy_target\n"
end
when :revoke
invoke "model", [@helper.source_model_name], behavior: :revoke
end
end
def handle_destination_model
case self.behavior
when :invoke
args = @helper.generate_destination_model_options
created_files = invoke("model", args)
when :revoke
invoke "model", [@helper.destination_model_name], behavior: :revoke
end
end
end
end
Разве нельзя запускать один и тот же генератор несколько раз внутри другого генератора?