2011-07-31 6 views
3

レール2には、dbの外部キーを設定および削除するためのメソッドを持つlib/migration_helpers.rbファイルがありました。 これらのメソッドはすぐにクラス文の後レール3の移行でカスタムヘルパーメソッドにアクセス

extend MigrationHelpers 

上部に

require 'migration_helpers' 

移行ファイルに追加することで、移行ファイルにするself.upとするself.downで利用できた、と

。レール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ファイルを嫌うからです。

これはスコープの問題であると思われます(レール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