gpt4 book ai didi

ruby-on-rails - 覆盖用于在 Rails 4 中创建表的默认 ActiveRecord 迁移

转载 作者:数据小太阳 更新时间:2023-10-29 08:04:05 24 4
gpt4 key购买 nike

在我们现有的 Rails 3 应用程序中,我们使用覆盖的 migration.rb 文件来自定义表创建行为。

这是在 Rails 3 中通过将我们的自定义文件放在 lib/templates/active_record/model/migration.rb 中完成的,但是看起来 Rails 4 已经更改了用于这些模板的位置,这覆盖不再被拾取(它在创建表时使用默认的 ActiveRecord 迁移)。

我已经查看了 4.1 ActiveRecord 代码,但无法让覆盖再次工作。

有人知道在 Rails 4 代码库中放置我们的自定义 migration.rb 的正确位置吗?

编辑澄清

当您在 Rails 中创建新模型时,为您生成的迁移基于 (> 4.1.x) activerecord/lib/rails/generators/active_record/migration/templates/create_table_migration 中的模板.rbRails gem .

这在 Rails 3.2 之后发生了变化。在 Rails 3.2 中,使用的模板称为 migration.rb,位于 Rails gemactiverecord/lib/rails/generators/active_record/model/templates 目录中。 .

为了自定义生成的模板(添加将在 change 方法中执行的自定义 SQL block ),我们通过在本地代码库中放置修改后的副本来覆盖此文件在 lib/templates/active_record/model 目录下。

我们对其进行自定义以在迁移结束时添加一些特定于应用程序的 SQL。在 rails 3 中,这意味着无论何时您生成新模型,生成的迁移都会在迁移结束时自动神奇地包含我们的自定义 SQL。

在我们的 Rails 4 升级中不再使用这个自定义迁移,所以我们得到由 Rails 生成的普通迁移文件,并且每次都必须手动添加 SQL。

我尝试遵循相同的约定并将文件放在 lib/templates/active_record/migration/migration.rb(以及其他各种位置)中,但自定义模板未被使用生成迁移时的 Rails。

最佳答案

在 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 语句。无论何时运行任何生成器,您都可以看到搜索模板的所有路径的列表。还有其他方法,但这应该能让您有所了解。

关于ruby-on-rails - 覆盖用于在 Rails 4 中创建表的默认 ActiveRecord 迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25348296/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com