在rails 2中,我有一个lib / migration_helpers.rb文件,其中包含在db中设置和删除外键的方法。 通过添加迁移文件
,可以在迁移文件中的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”) 但无法想象如何解决问题(现在我只是简单地复制了迁移文件中的代码,只是为了检查它是否应该做它应该做的事情。)
Francesco
答案 0 :(得分: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类中包含此帮助程序不起作用,因此它应该在外面。