在 rails 2 中,我有一个 lib/migration_helpers.rb 文件,其中包含在数据库中设置和删除外键的方法。这些方法在迁移文件中的 self.up 和 self.down 中可用,方法是在迁移文件中添加
require 'migration_helpers'
在顶部,并且
extend MigrationHelpers
在类声明之后立即。
在 rails 3 这不起作用,如果我尝试使用 migration_helpers.rb 中的 set_foreign_key 方法运行迁移,则会引发以下错误:
== AddFkToArticles: migrating ================================================
-- set_foreign_key("articles", "book_id", "books")
rake aborted!
An error has occurred, this and all later migrations canceled:
undefined method `set_foreign_key' for #<AddFkToArticles:0x000001034a1f38>
Tasks: TOP => db:migrate
(See full trace by running task with --trace)
我已经检查了在 config/application.rb 中自动加载路径设置为包含 lib。该文件实际上是必需的,因为如果我注释掉 require 语句,那么 rails 就会抱怨丢失的“migration_helpers”文件。
我怀疑这是一个范围问题(rails 2 使用“def self.up”,rails 3 使用“def change”)但无法想象如何解决问题(现在我只是复制了迁移文件中的代码,只是为了检查它做了它应该做的)。
弗朗切斯科