Итак, я пишу генератор rails, чтобы сделать самые простые вещи: скопировать некоторые файлы моделей из каталога gem lib / generators / pathways / templates в проект в каталоге app / models. Возможно, я ошибочно понимаю, что метод шаблона в основном представляет собой копию файла с источником / целью.
(обратите внимание, что "pathways" - это имя моего драгоценного камня, который устанавливает этот генератор)
Воткишки кода копии в генераторе:
def copy_models
project_models_location = "#{Rails.root}/app/models/"
[
"pathways_experiment.rb",
...
].each do |filename|
puts "copying #{filename} to #{project_models_location}"
template filename, "#{project_models_location}"
end
end
Put отображает то, что я ожидал:
копирование pathways_experiment.rb в / Users / meuser / Projects / testing_gem / exp_gem_test /app / models /
однако, вызов метода templates
выводит этот вывод:
file_clash app / models
Iпроверил целевой каталог, и в нем нет файлов, так что, похоже, это не потому, что код пытается перезаписать файл.
вот источник всего генератора на случай, если у меня его просто нетвключены или расширены правильные классы / модули:
требуют 'рельсы / генераторы' требуют 'рельсы / генераторы / active_record'
module Pathways
class InstallGenerator < ActiveRecord::Generators::Base
include Rails::Generators::Migration
source_root File.expand_path("../templates", __FILE__)
def code_that_runs
puts "PATHWAYS: installing models"
copy_models
end
private
def copy_models
project_models_location = "#{Rails.root}/app/models/"
[
"pathways_experiment.rb",
...
].each do |filename|
puts "copying #{filename} to #{project_models_location}"
template filename, "#{project_models_location}"
end
end
end
end