3

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」を使用します) が、問題を解決する方法を想像することはできません (今では、移行ファイルのコードをコピーして確認するだけです)。やるべきことをすること)。

フランチェスコ

4

1 に答える 1

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

このヘルパーを Migration クラス内に含めても機能しないため、外部に配置する必要があります。

于 2011-07-31T18:21:55.240 に答える