2011-07-31 146 views
3

在rails 2中,我有一個lib/migration_helpers.rb文件,其中包含用於在數據庫中設置和刪除外鍵的方法。 這些方法是在遷移文件self.up和self.down可在遷移文件訪問rails 3遷移中的自定義幫助器方法

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) 

我已經檢查,在配置/ application.rb中自動加載路徑被設置爲包含lib。 該文件是有效的要求,因爲如果我註釋掉require語句,那麼rails會抱怨缺少'migration_helpers'文件。我想這是一個範圍問題(導軌2使用「def self.up」,導軌3使用「def change」) 但無法想象如何解決問題(現在我簡單地複製遷移中的代碼文件,只是爲了檢查它應該做什麼)。

弗朗西斯

回答

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 

包括這個助手的移民類中不工作,所以它應該是外面。

+2

我不得不將需要File.expand_path('../../../ lib/test_helper',__FILE__)添加到我的遷移文件的頂部。沒有它,它將無法工作。 – baash05

相關問題