覆盖Rails 4中用于创建表的默认ActiveRecord迁移

3
在我们现有的Rails 3应用程序中,我们使用一个重写的文件来自定义表创建行为。
在Rails 3中,通过将我们的自定义文件放置在中实现了这一点,但是在Rails 4中,似乎更改了这些模板使用的位置,并且不再使用此覆盖(创建表时使用默认的ActiveRecord迁移)。
我已经查看了4.1 ActiveRecord代码,但无法使覆盖再次起作用。
有人知道在Rails 4代码库中放置我们自定义的正确位置吗?
编辑以澄清
当您在Rails中创建新模型时,为您生成的迁移基于(> 4.1.x)中找到的模板,在 Rails gem 中。
自Rails 3.2以来,这已经发生了变化。在Rails 3.2中使用的模板称为,并位于 Rails gem 的目录中。
为了自定义生成的模板(添加将在方法中执行的自定义SQL块),我们通过在本地代码库中放置修改后的副本来覆盖此文件,并将其放置在目录下。
我们对其进行自定义以在迁移的末尾添加一些特定于应用程序的SQL。在Rails 3中,这意味着每次生成新模型时,生成的迁移都会自动包括我们的自定义SQL在迁移的末尾。
在我们的Rails 4升级中,不再使用此自定义迁移,因此我们正在获得由rails生成的香草迁移文件,并且每次都必须手动添加SQL。
我尝试遵循相同的约定并将文件放置在(以及其他各种位置),但是当生成迁移时,Rails不使用自定义模板。
2个回答

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语句。每当您运行任何生成器时,您可以看到搜索模板的所有路径列表。还有其他方法,但这应该给您一个想法。


抱歉回复晚了 :) 感谢您的答案 - 第一条路径没有起作用,第二条路径起作用了。 - Michael Shimmins

0

谢谢,但那不是正确的migration.rb文件。我想要覆盖的文件在Rails gem中的activerecord/lib/rails/generators/active_record/migration/templates目录下。 - Michael Shimmins

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接