我正在查看外国人宝石并尝试创建一些外键。但是,gems文档说您应该像这样创建外键 `add_foreign_key(from_table, to_table, options) 但是当我这样做时,它似乎向后工作。例如,我有 3 个模型,Entry、Ingredient 和一个名为 EntryIngredient 的关联。Entry通过EntryIngredient有很多的Ingredient,通过EntryIngredients有很多Entry,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
有人可以向我解释这里发生了什么吗?为什么我有阅读障碍?