Rails生成器不会在销毁时删除新创建的文件夹

时间:2018-10-18 19:36:21

标签: ruby-on-rails rails-generators

我正在编写一个Rails生成器,它将把我的gem的模板目录中的文件/文件夹复制到该应用程序的目录中。运行rails generate mygem:install时,它可以按预期工作,但是当我尝试使用rails destroy mygem:install进行反向操作时,它不会删除新创建的子文件夹。

模板文件夹

├── templates
│   ├── views
│   │   ├── about
│   │   │   ├── index.html.erb
│   │   ├── contact
│   │   │   ├── index.html.erb 

app文件夹(生成后)

├── app
│   ├── views
│   │   ├── about
│   │   │   ├── index.html.erb
│   │   ├── contact
│   │   │   ├── index.html.erb 

应用文件夹(销毁后)

├── app
│   ├── views
│   │   ├── about
│   │   ├── contact

所需结果

├── app
│   ├── views

我的宝石的安装生成器

module Mygem
  module Generators
    class InstallGenerator < Rails::Generators::Base

      source_root File.expand_path('../templates', __FILE__)

      def copy_templates
        templates = Dir.glob("#{source_paths[0]}/*")
        directory(templates[0], "app/views/")
      end

    end
  end
end

1 个答案:

答案 0 :(得分:0)

我遇到了相同的问题-通过将以下内容添加到我的generator.rb文件中来解决

def clean_up
  case self.behavior
    when :revoke then `rm -rf path/to/directory/`
  end
end

您还具有:invoke选项,用于指定仅在生成时发生的操作:

case self.behavior
  when :invoke then do_something
end

如此

# something_generator.rb

def generate_directory
  case self.behavior
  when :invoke
    `mkdir path/to/directory`
  when :revoke
    `rm -rf path/to/directory`
  end
end