2017-04-11 52 views
1

我有一个Rails 5应用程序,它有三个数据库的单独迁移。我正在添加一个新的数据库。我通常做一个rails g model field1:type1 field2:type2 field3:type ....来创建我的数据库表与所需的领域。我想创建生成模型语句,它将生成所需数据库的模型并将其放入相应的db/migrate文件夹中。如何创建自定义Rails生成模型函数?

我有自定义数据库迁移生成器的其他数据库在lib /生成器。以下是自定义迁移生成器的示例。

lib/generators/stats_migration_generator.rb 

require 'rails/generators/active_record/migration/migration_generator' 

class StatsMigrationGenerator < ActiveRecord::Generators::MigrationGenerator 
    source_root File.join(File.dirname(ActiveRecord::Generators::MigrationGenerator.instance_method(:create_migration_file).source_location.first), "templates") 

    def create_migration_file 
    set_local_assigns! 
    validate_file_name! 
    migration_template @migration_template, "db_stats/migrate/#{file_name}.rb" 
    end 
end 

我想我需要创建的lib /发电机/ mydb_model_generator.rb或任何正确的文件名结构是每个额外的数据库。我想我可以在GitHub中查看model_generator.rb文件后做这样的事情。

lib/generators/stats_model_generator.rb 

require 'rails/generators/active_record/model/model_generator' 

class StatsModelGenerator < ActiveRecord::Generators::ModelGenerator 
    source_root File.join(File.dirname(ActiveRecord::Generators::ModelGenerator.instance_method(:create_migration_file).source_location.first), "templates") 

    def create_migration_file 
    set_local_assigns! 
    validate_file_name! 
    migration_template @migration_template, "db_stats/migrate/#{file_name}.rb" 
    end 
end 

这里是我的问题,看着为Rails,the Rails Guide regarding creating and customizing Generators和Ruby on Rails的API文档Git仓库后:

  1. 我如何找到我需要什么要求?
  2. 如何找到我需要重写db/migrate文件夹名称的方法?
  3. 如何找出如何命名模型生成器的rb文件?

我的假设在我尝试创建模型生成器时是否正确?

回答

0

嗯,我不认为我会很快找到解决方案。我又看了一眼GitHub中的model_generator.rb,并有一段时间。我意识到我只需要将默认生成器中的方法替换为指向我想要的db migrate文件夹的版本。这是我想出的解决方案。现在

require 'rails/generators/active_record/model/model_generator' 

class MydbModelGenerator < ActiveRecord::Generators::ModelGenerator 
    source_root File.join(File.dirname(ActiveRecord::Generators::ModelGenerator.instance_method(:create_migration_file).source_location.first), "templates") 

    def create_migration_file 
    return unless options[:migration] && options[:parent].nil? 
    attributes.each { |a| a.attr_options.delete(:index) if a.reference? && !a.has_index? } if options[:indexes] == false 
    migration_template "../../migration/templates/create_table_migration.rb", File.join("db_mydb/migrate", "create_#{table_name}.rb") 
    end 
end 

我可以做rails g mydb_model field1:type1 field2:type2 field3:type并且它会在正确的迁移文件夹中的模型迁移文件。