代码之家  ›  专栏  ›  技术社区  ›  LucasMelo

在rails 4.1.4迁移中添加索引ruby

  •  1
  • LucasMelo  · 技术社区  · 10 年前

    我正在RoR中创建一个项目,在运行“rakedb: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
    

    有人能告诉我我错在哪里?

    2 回复  |  直到 10 年前
        1
  •  1
  •   Aguardientico    10 年前

    问题是引用需要一个单独的名称,您也可以在创建引用的同一行中创建索引,因此迁移应该如下所示:

    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
    
        2
  •  1
  •   Josh    10 年前

    试试看:

    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