2017-04-11 3 views
1

私は3つのデータベースのために別々の移行を持つ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 
    

    ここでのRails、the Rails Guide regarding creating and customizing GeneratorsとRuby on RailsのAPIドキュメントのためのgitリポジトリを見た後、私の質問がありますか?

  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を行うことができますし、それが正しい移行フォルダ内のモデル移行ファイルを作成します。

関連する問題