在我们现有的Rails 3应用程序中,我们使用重写的migration.rb
文件来自定义表创建行为。
这是在Rails 3中通过将我们的自定义文件放在lib/templates/active_record/model/migration.rb
中完成的,但是看起来Rails 4已经更改了用于这些模板的位置,并且此覆盖不再被拾取(它使用了创建表时默认的ActiveRecord迁移。)
我已经浏览了4.1 ActiveRecord代码,但无法再次使用覆盖。
是否有人知道将自定义migration.rb
放入Rails 4代码库的正确位置?
编辑澄清
在Rails中创建新模型时,为您生成的迁移基于Rails gem中(> 4.1.x)activerecord/lib/rails/generators/active_record/migration/templates/create_table_migration.rb
中找到的模板。
自Rails 3.2以来,这已经发生了变化。在Rails 3.2中,使用的模板名为migration.rb
,位于Rails gem的activerecord/lib/rails/generators/active_record/model/templates
目录中。
为了自定义生成的模板(添加将在change
方法中执行的自定义SQL块),我们通过将其修改后的副本放在{的{}下的本地代码库中来覆盖此文件。 {1}}目录。
我们对其进行自定义,以便在迁移结束时添加一些特定于应用程序的SQL。在rails 3中,这意味着无论何时生成新模型,生成的迁移都会在迁移结束时自动包含我们的自定义SQL。
在我们的Rails 4升级中,此自定义迁移不再被使用,因此我们获取了rails生成的vanilla迁移文件,并且每次都必须手动添加SQL。
我尝试遵循相同的约定并将文件放在lib/templates/active_record/model
(以及其他各种位置)中,但Rails在生成迁移时没有使用自定义模板。
答案 0 :(得分:2)
在Rails 4.2.6中,这些路径是这样的:
lib/templates/active_record/migration/migration.rb
lib/templates/migration/templates/create_table_migration.rb
这个问题的最终答案是查看Thor库的源代码,因为所有的rails生成器都是基于它的。这就是我找到正确路径的方式。
转到lib/thor/actions.rb
文件并查找find_in_source_paths
方法,然后在其中添加puts语句。无论何时运行任何生成器,您都可以看到搜索模板的所有路径的列表。还有其他方法,但这应该给你一个想法。
答案 1 :(得分:0)
在Rails 4.1.4中,这应该放在这里:
activerecord/lib/active_record/migration.rb
来源:
http://api.rubyonrails.org/files/activerecord/lib/active_record/migration_rb.html