В rails 2 у меня был файл lib /igration_helpers.rb с методами установки и удаления внешних ключей в БД.
Эти методы были доступны в self.up и self.down в файлах миграции, добавив в файл миграции
require 'migration_helpers'
вверху и
extend MigrationHelpers
сразу после утверждения класса.
В rails 3 это не работает, и если я пытаюсь запустить миграцию, используя метод set_foreign_key изigration_helpers.rb, выдается следующая ошибка:
== 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, то разражается жалобным плачом по поводу отсутствующего файла'igration_helpers '.
Я подозреваю, что это проблема с областью видимости (rails 2 использует "def self.up", rails 3 использует "def change")
но не могу себе представить, как решить проблему (сейчас я просто скопировал код в файл миграции, просто чтобы убедиться, что он делает то, что должен).
Франческо