2017-04-11 9 views
1

세 개의 데이터베이스에 대해 별도의 마이그레이션이있는 Rails 5 응용 프로그램이 있습니다. 새 데이터베이스를 추가하고 있습니다. 나는 보통 rails g model field1:type1 field2:type2 field3:type ....을 사용하여 원하는 필드가있는 데이터베이스 테이블을 만듭니다. 나는 원하는 데이터베이스에 대한 모델을 생성하고 해당 db/migrate 폴더에 넣을 모델 문을 생성하려고합니다.커스텀 레일 생성 모델 생성 기능은 어떻게합니까?

lib/generators의 추가 데이터베이스에 대한 사용자 지정 데이터베이스 마이그레이션 생성기가 있습니다. 다음은 사용자 지정 마이그레이션 생성기의 예입니다.

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 파일을 본 후에 이런 식으로 할 수 있다고 생각하고있다.

  1. 어떻게 내가 필요로 할 필요가 무엇을 찾을 수 있습니까 :

    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 
    

    여기 레일, the Rails Guide regarding creating and customizing Generators과 루비 온 레일스 API 문서에 대한 자식 저장소에보고 한 후 내 질문은?

  2. db/migrate 폴더 이름을 덮어 쓸 필요가있는 방법을 찾으려면 어떻게합니까?
  3. 모델 생성기의 rb 파일 이름을 지정하는 방법은 무엇입니까?

모델 생성기를 만들 때 내 가정이 맞습니까?

답변

0

글쎄, 그렇게 빨리 해결책을 찾지 못할 것이라고 생각했습니다. 나는 GitHub에서 model_generator.rb을 다시 보았고 aha 순간을 보냈다. 기본 생성기의 메서드를 원하는 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을 할 수 있으며, 그것은 올바른 마이그레이션 폴더에 모델 마이그레이션 파일을 만듭니다.