Rails 2 では、db に外部キーを設定および削除するためのメソッドを含む lib/migration_helpers.rb ファイルがありました。これらのメソッドは、移行ファイルに追加することにより、移行ファイルの 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」を使用します) が、問題を解決する方法を想像することはできません (今では、移行ファイルのコードをコピーして確認するだけです)。やるべきことをすること)。
フランチェスコ