2014-09-04 93 views
1

我創造回報率的項目,並得到一個錯誤,當運行「耙分貝:遷移」:附加指數紅寶石4.1.4遷移

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 

有人可以告訴我我錯了嗎?

回答

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 
+0

它的工作,但只是爲了教育的目的,在這種情況下,我的add_index應該如何?另外它更適合在同一行中創建或使用add_index? – LucasMelo 2014-09-04 00:57:01

+1

就像你在你的問題中加入的那樣:'add_index:purchases,item_id'問題是對於item的例子,使用't.references:items'它會產生一個名爲'items_id'的字段而不是'item_id' – Aguardientico 2014-09-04 00:59:24

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