生成和执行第一个生成器

#lib/generators/initializer_generator.rb
class InitializerGenerator < Rails::Generators::Base
  desc "This generator creates an initializer file at config/initializers"
  def create_initializer_file
    create_file "config/initializers/initializer.rb", "# Add initialization content here"
  end
end
#执行
rails generate initializer  #可以在config/initializers中看到initializer.rb文件,内容为# Add initialization content here

使用生成器创建生成器

#使用生成器创建生成器,意思就是快速生成生成器的方法
rails generate generator initializer
      create  lib/generators/initializer
      create  lib/generators/initializer/initializer_generator.rb
      create  lib/generators/initializer/USAGE
      create  lib/generators/initializer/templates

#initializer_generator.rb, Rails::Generators::NamedBase需要有一个参数来创建脚本的名字
class InitializerGenerator < Rails::Generators::NamedBase
  source_root File.expand_path("../templates", __FILE__)

  def copy_initializer_file
    #templates中创建文件initializer.rb文件,文件内容为"# Add initialization content here"
    copy_file "initializer.rb", "config/initializers/#{file_name}.rb" #file_name是Rails::Generators::NamedBase方法
  end
end
#执行
rails generate initializer core_extensions #生成config/initializers/core_extensions.rb,文件内容为initializer.rb内容

创建文件并且在文件中动态创建方法

# lib/generators/my_helper_generator.rb
class MyHelperGenerator < Rails::Generators::NamedBase
  def create_helper_file
    create_file "app/helpers/#{file_name}_helper.rb", <<-FILE
module #{class_name}Helper
  attr_reader :#{plural_name}, :#{plural_name.singularize}
end
    FILE
  end
end

#执行
rails generate my_helper products #生成app/helpers/products_helper.rb

#文件及文件内容如下
module ProductsHelper
  attr_reader :products, :product
end

#脚手架中使用这个生成器
config.generators do |g|
  g.helper          :my_helper
end

生成器的查找路径

#执行rails generate initializer core_extensions,执行代码,从下面的几个文件中查找
#下面的所有文件都在lib目录下面,lib目录在$LOAD_PATH中
rails/generators/initializer/initializer_generator.rb
generators/initializer/initializer_generator.rb
rails/generators/initializer_generator.rb
generators/initializer_generator.rb

避免Rails自动创建的asset,helper和test文件

#config/application.rb
config.generators do |generator|
  generator.helper false
  generator.assets false
  generator.view_specs false
  generator.test_framework false
  generator.skip_routes true #跳过路由的自动设置
end

通过修改模板改变脚手架内容

results matching ""

    No results matching ""