3

在 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”)但无法想象如何解决问题(现在我只是复制了迁移文件中的代码,只是为了检查它做了它应该做的)。

弗朗切斯科

4

1 回答 1

5

我不知道你到底想完成什么,但这里有一些代码可能会给你一个线索。

## lib/test_helper.rb
module TestHelper

  def my_table_name
    return :mytable 
  end

end

然后是迁移:

## db/migrate/test_migration.rb
include TestHelper

class TestMigration < ActiveRecord::Migration

  def self.up
    create_table my_table_name
  end

  def self.down
    drop_table my_table_name
  end
end

在 Migration 类中包含这个助手不起作用,所以它应该在外面。

于 2011-07-31T18:21:55.240 回答