我在RoR中创建一个项目并在运行“rake db:migrate”时出错:
Mysql2::Error: Key column 'item_id' doesn't exist in table
我不明白我做错了什么:
这是我的物品迁移
class CreateMerchants < ActiveRecord::Migration
def change
create_table :merchants do |t|
t.string :name, null: false, limit: 100
t.string :address, null: false, limit: 200
t.timestamps
end
end
end
我的购买迁移:
class CreatePurchases < ActiveRecord::Migration
def change
create_table :purchases do |t|
t.references :purchasers, null: false
t.references :items, null: false
t.references :merchants, null: false
t.decimal :purchase_count, null: false, precision: 17, scale: 2
t.timestamps
end
add_index :purchases, :item_id
add_index :purchases, :merchant_id
add_index :purchases, :purchaser_id
end
end
有人可以告诉我我错在哪里吗?
答案 0 :(得分:1)
试试这个:
class CreatePurchases < ActiveRecord::Migration
def change
create_table :purchases do |t|
t.integer :purchaser_id, null: false
t.integer :item_id, null: false
t.integer :merchant_id, null: false
t.decimal :purchase_count, null: false, precision: 17, scale: 2
t.timestamps
end
add_index :purchases, :item_id
add_index :purchases, :merchant_id
add_index :purchases, :purchaser_id
end
end
答案 1 :(得分:1)
问题是引用需要一个单数名称,您也可以在创建引用的同一行中创建索引,因此迁移应该如下所示:
class CreatePurchases < ActiveRecord::Migration
def change
create_table :purchases do |t|
t.references :purchaser, null: false, index: true
t.references :item, null: false, index: true
t.references :merchant, null: false, index: true
t.decimal :purchase_count, null: false, precision: 17, scale: 2
t.timestamps
end
end
end