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

kra*_*anz 3 rails-migrations ruby-on-rails-3

在rails 2中,我有一个lib/migration_helpers.rb文件,其中包含在db中设置和删除外键的方法.通过添加迁移文件,可以在迁移文件中的self.up和self.down中使用这些方法

require 'migration_helpers'
Run Code Online (Sandbox Code Playgroud)

在顶部,和

extend MigrationHelpers
Run Code Online (Sandbox Code Playgroud)

在课堂陈述后立即.

在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)
Run Code Online (Sandbox Code Playgroud)

我已经在config/application.rb中检查过,自动加载路径设置为包含lib.该文件是有效的,因为如果我注释掉require语句,那么rails会对丢失的'migration_helpers'文件抱怨.

我怀疑这是一个范围问题(rails 2使用"def self.up",rails 3使用"def change")但无法想象如何解决问题(现在我只是复制了迁移文件中的代码,只是为了检查它做它应该做的事情).

弗朗切斯科

Len*_*art 5

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

## lib/test_helper.rb
module TestHelper

  def my_table_name
    return :mytable 
  end

end
Run Code Online (Sandbox Code Playgroud)

然后迁移:

## 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
Run Code Online (Sandbox Code Playgroud)

在Migration类中包含此帮助程序不起作用,因此它应该在外面.

  • 我必须在我的迁移文件的顶部添加require File.expand_path('../../../ lib/test_helper',__ FILE__).没有它,它就行不通. (2认同)