2016-09-14 7 views
1

私はadd_column:users、:confirmed_at(confirmation_at):datetimeという名前を付けました。そこで、私は適切なフィールド名に変更しました:(confirmed_at)Rails db migrate 1回目の移行後にフィールド名を変更するとエラーが中止されました

次に、コマンドラインでrake db:rollbackと入力しました。

class AddConfirmableToDevise < ActiveRecord::Migration 
    def up 
    add_column :users, :confirmation_token, :string 
    add_column :users, :confirmed_at, :datetime 
    add_column :users, :confirmation_sent_at, :datetime 

    add_index :users, :confirmation_token, unique: true 
    end 

    def down 
    remove_column :users, :confirmation_token, :confirmed_at, :confirmation_sent_at 
    end 
end 

エラー移行後:

tzurch:~/workspace (gravitar) $ rake db:migrate:redo 

#the error that came up below 
_________________________________________________ 
== 20160902201448 AddFullnameToUser: reverting ================================ 

-- remove_column(:users, :fullname, :string) 

-> 0.0207s 

== 20160902201448 AddFullnameToUser: reverted (0.0284s) ======================= 

== 20160902201448 AddFullnameToUser: migrating ================================ 

-- add_column(:users, :fullname, :string) 

-> 0.0008s 

== 20160902201448 AddFullnameToUser: migrated (0.0009s) ======================= 

== 20160913221959 AddConfirmableToDevise: migrating =========================== 

-- add_column(:users, :confirmation_token, :string) 

-> 0.0009s 

-- add_column(:users, :confirmed_at, :datetime) 

-> 0.0005s 

-- add_column(:users, :confirmation_sent_at, :datetime) 

rake aborted! 

StandardError: An error has occurred, this and all later migrations canceled: 

SQLite3::SQLException: duplicate column name: confirmation_sent_at: ALTER TABLE "users" ADD "confirmation_sent_at" datetime: 

答えて

0

ここでの問題は、列を削除するために使用している構文が間違っていることです。

正しい構文は

class AddConfirmableToDevise < ActiveRecord::Migration 
    def up 
    add_column :users, :confirmation_token, :string 
    add_column :users, :confirmed_at, :datetime 
    add_column :users, :confirmation_sent_at, :datetime 

    add_index :users, :confirmation_token, unique: true 
    end 

    def down 
    remove_column :users, :confirmation_token 
    remove_column :users, :confirmed_at 
    remove_column :users, :confirmation_sent_at 

    remove_index :users, :confirmation_token 
    end 
end 

または完全down移行を削除し、changeupを置き換えるとremove_column

remove_column(table_name, column_name, type = nil, options = {}) 

変更ダウンの移行で、レールがロールバックする方法を見つけ出すだろう:

class AddConfirmableToDevise < ActiveRecord::Migration 
    def change 
    add_column :users, :confirmation_token, :string 
    add_column :users, :confirmed_at, :datetime 
    add_column :users, :confirmation_sent_at, :datetime 

    add_index :users, :confirmation_token, unique: true 
    end 
end 
+0

I defを完全に削除してからrake db:migrate:redoを実行すると、同じエラーが発生しました。エラーが示唆しているように、dbに重複フィールドがあるようです。もしそうなら、私はどのように見つけて削除するのですか?私はRubyの粗悪なことをしています....:ActiveRecord :: StatementInvalid:SQLite3 :: SQLException:重複する列名:confirmation_sent_at:ALTER TABLE "users" ADD "confirmation_sent_at" datetime – Zurch

+0

あなたは 'rake db:migrate:下のVERSION = migration_version_no'を実行してからrake db:migrate:up VERSION = migration_version_no'もう一度 –

+0

私は戻って適切なフィールド名 – Zurch

0

私はあなたが既に持っているデシベルで、この表にconfirmation_sent_atフィールドがあると、それはファイルコードの移行DBしかし、最初に私のRails以下のメッセージといくつかの理由で中止されました

関連する問題