访问rails 3迁移中的自定义帮助程序方法

时间:2011-07-31 05:34:41

标签: ruby-on-rails-3 rails-migrations

在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

1 个答案:

答案 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类中包含此帮助程序不起作用,因此它应该在外面。