私は外国人の宝石を見て、いくつかの外部キーを作成しようとしています。ただし、宝石のドキュメントには、この `add_foreign_key(from_table, to_table, options) のように外部キーを作成する必要があると書かれていますが、それを行うと、逆に機能するようです。たとえば、Entry、Ingredient、および EntryIngredient という 3 つのモデルがあります。Entry は EntryIngredient を通じて多数の Ingredient を持ち、Ingredient は EntryIngredients を通じて多数の Entries を持ち、EntryIngredient はこれらの両方に属します。それでも、これは機能するコードです:
class EntryIngredient < ActiveRecord::Base
belongs_to :entry
belongs_to :ingredient
end
class CreateEntryIngredients < ActiveRecord::Migration
def self.up
create_table :entry_ingredients do |t|
t.references :entry
t.references :ingredient
t.integer :quantity
t.string :unit
t.timestamps
end
add_index :entry_ingredients, [:entry_id, :ingredient_id]
add_foreign_key :entry_ingredients, :entries, :dependent => :delete
add_foreign_key :entry_ingredients, :ingredients, :dependent => :delete
end
def self.down
drop_table :entry_ingredients
end
end
ドキュメントによると、外部キーは実際には次のように追加する必要があると思います。
add_foreign_key :entries, :entry_ingredients, :dependent => :delete
add_foreign_key :ingredients, :entry_ingredients, :dependent => :delete
しかし、移行を実行すると、
Mysql2::Error: Key column 'entry_ingredient_id' doesn't exist in table: ALTER TABLE `entries` ADD CONSTRAINT `entries_entry_ingredient_id_fk` FOREIGN KEY (`entry_ingredient_id`) REFERENCES `entry_ingredient`(id) ON DELETE CASCADE
誰かがここで何が起こっているのか説明できますか? なぜ私は失読症なのですか?