2017-07-03 129 views
1

我正在使用Ruby與葡萄。我創建了一個遷移文件來生成一個模型。當我運行遷移文件時,沒有發生錯誤,但未創建模型。所以我試着回滾。因爲模型不會再次退出會引發錯誤。表格上的索引名稱不存在

class CreatePaymentFortumoInstruments < ActiveRecord::Migration 
     def change 
     create_table(:payment_fortumo_instruments, id: false) do |t| 
      t.primary_key :id, :uuid 
      t.string :consumer_id, null: false 
      t.string :product_code, null: true, default: nil 
      t.string :partner, null: false 
      t.string :aasm_state, null: false 
      t.datetime :issued_at, null: true 
      t.datetime :activated_at, null: true 
      t.datetime :deactivated_at, null: true 
      t.timestamps 
     end 

     add_index :payment_fortumo_instruments, :id 
     add_index :payment_fortumo_instruments, :consumer_id 
    end 
    end 

同時回滾

== 76 CreatePaymentFortumoInstruments: reverting 
    ============================== 
    -- remove_index(:payment_fortumo_instruments, 
    {:column=>:consumer_id}) 
    rake aborted! 
    StandardError: An error has occurred, this and all later migrations 
    canceled: 

Index name ‘index_payment_fortumo_instruments_on_consumer_id’ on table 
‘payment_fortumo_instruments’ does not exist 
/opt/icflix/billing-v2/Rakefile:53:in `block (2 levels) in <top 
(required)>' 
ArgumentError: Index name 
‘index_payment_fortumo_instruments_on_consumer_id’ on table 
‘payment_fortumo_instruments’ does not exist 
/opt/icflix/billing-v2/Rakefile:53:in `block (2 levels) in <top 
    (required)>' 
Tasks: TOP => db:rollback 
(See full trace by running task with --trace) 

我怎樣才能再次運行相同的遷移文件,並創建模型中引發的錯誤。我不想爲此創建新的遷移文件。

+0

對不起,型號名稱是CreatePaymentFortumoInstruments而不是CreateTestPaymentFortumoInstruments。 –

+1

從您的schema_migrations表中刪除上次的遷移記錄。如果您的schema.rb文件已經生成,請使用先前的遷移文件(CreatePaymentFortumoInstruments之前的文件)替換版本號。然後運行rake db:migrate –

+0

通過遷移創建**表**不會創建關聯的**模型**。 (您並不總是*需要*給定表格的模型!)您需要單獨創建,或使用某種「腳手架」發生器 - 例如[本](https://github.com/icicletech/grape-scaffold#scaffold)。 –

回答

1

如果你已經搞砸了你的遷移並且它是本地數據庫,那麼放棄數據庫並再次運行遷移總是最容易的。

如果您的最新遷移正確更新了架構,則可以運行rake db: reset,這將重新創建數據庫,然後從架構中加載。

但是可以肯定的是,我會建議重新運行遷移:db:migrate:reset,它將重新創建數據庫,然後運行遷移。

+0

謝謝,更新schema_migrations爲我工作。 –