Что я делаю, так это добавлю InstallGenerator
, который добавит миграции на сам сайт Rails. Это поведение не совсем то, что вы упомянули, но сейчас, для меня, это достаточно хорошо.
Небольшая инструкция:
Сначала создайте папку lib\generators\<your-gem-name>\install
и внутри этой папки создайте файл с именем install_generator.rb
со следующим кодом:
require 'rails/generators/migration'
module YourGemName
module Generators
class InstallGenerator < ::Rails::Generators::Base
include Rails::Generators::Migration
source_root File.expand_path('../templates', __FILE__)
desc "add the migrations"
def self.next_migration_number(path)
unless @prev_migration_nr
@prev_migration_nr = Time.now.utc.strftime("%Y%m%d%H%M%S").to_i
else
@prev_migration_nr += 1
end
@prev_migration_nr.to_s
end
def copy_migrations
migration_template "create_something.rb", "db/migrate/create_something.rb"
migration_template "create_something_else.rb", "db/migrate/create_something_else.rb"
end
end
end
end
и внутри lib/generators/<your-gem-name>/install/templates
добавьте два файла, содержащие миграции, например, возьмите тот, названный create_something.rb
:
class CreateAbilities < ActiveRecord::Migration
def self.up
create_table :abilities do |t|
t.string :name
t.string :description
t.boolean :needs_extent
t.timestamps
end
end
def self.down
drop_table :abilities
end
end
Затем, когда ваш драгоценный камень будет добавлен в какое-то приложение, вы можете просто сделать
rails g <your_gem_name>:install
и это добавит миграции, а затем вы можете просто сделать rake db:migrate
.
Надеюсь, это поможет.