ruby-on-rails - 如何覆盖 Rails 的默认迁移生成器模板

标签 ruby-on-rails ruby-on-rails-3 activerecord rails-generators

我需要覆盖这些迁移模板:

https://github.com/rails/rails/blob/e20dd73df42d63b206d221e2258cc6dc7b1e6068/activerecord/lib/rails/generators/active_record/migration/templates/migration.rb
https://github.com/rails/rails/blob/e20dd73df42d63b206d221e2258cc6dc7b1e6068/activerecord/lib/rails/generators/active_record/migration/templates/create_table_migration.rb

在我的 rails 应用程序中,以便他们从 rails 应用程序中获取模板而不是 gem 本身。到目前为止,我已经尝试了所有可能的组合,但没有运气。

我试过的:

- Rails.root/lib/templates/rails/migration/migration.rb
- Rails.root/lib/templates/rails/migration_generator/migration.rb
- Rails.root/lib/rails/templates/rails/migration/migration.rb
- Rails.root/lib/rails/templates/rails/migration_generator/migration.rb
- Rails.root/lib/rails/generators/templates/rails/migration/migration.rb
- Rails.root/lib/rails/generators/templates/rails/migration_generator/migration.rb
- Rails.root/lib/rails/templates/generators/rails/migration/migration.rb
- Rails.root/lib/rails/templates/generators/rails/migration_generator/migration.rb
- Rails.root/lib/rails/generators/active_record/migration/templates/migration.rb
- Rails.root/lib/rails/generators/active_record/migration_generator/templates/migration.rb
- Rails.root/lib/rails/generators/active_record/templates/migration.rb
- Rails.root/lib/rails/generators/active_record/templates/migration.rb

谁能指出我正确的方向?

最佳答案

我想出了一个解决我的案例的方法:

我用这个命令创建了一个 Rails 生成器(在我的 Rails 应用程序目录中) -

rails g generator my_migrator

它创建:
lib/generators/my_migrator/my_migrator.rb
lib/generators/my_migrator/templates
lib/generators/my_migrator/USAGE

然后我添加了这段代码,通过将这段代码添加到 my_generator.rb 来扩展我的生成器中的 rails 迁移生成器:
require 'rails/generators'
require 'rails/generators/active_record'
require 'rails/generators/actions/create_migration'

class MyGenerator < ActiveRecord::Generators::Base
  source_root File.expand_path('../templates', __FILE__)
  argument :attributes, :type => :array, :default => [], :banner => "field[:type][:index] field[:type][:index]"

  def create_migration_file
    set_local_assigns!
    validate_file_name!
    migration_template @migration_template, "db/migrate/#{file_name}.rb"
    # more code here as per requirement.
  end

  # more code below as per requirement..
end

在这里张贴,希望它会在 future 的某一天帮助某人。

关于ruby-on-rails - 如何覆盖 Rails 的默认迁移生成器模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25186549/

相关文章:

javascript - 带 rails 的主干 - 包括订单

ruby-on-rails - Rails 5 - 无法清理测试数据库

scala - 在 Scala ActiveRecord 中使用 groupby 编写联接查询

ruby-on-rails-3 - 使用 rspec 2 测试不在 spec/controllers 中的 rails Controller

javascript - 将框背景颜色更改为从数据库中获取的相等十六进制

ruby-on-rails - 用 before_add 关联回调静默跳过添加而不是引发异常?

ruby-on-rails - Rails 3 ActiveRecord 预先加载范围

ruby-on-rails - rails :order by date in Postgres returning incorrect order

ruby-on-rails - 使用 Active Record 查询 json 数组 (Rails 4/postgresql9.4)

ruby-on-rails - 在 Rails 3 中使用多个可选的 where 条件(子句)进行查询?