【问题标题】:Migrations are cancelled and duplicate column error迁移被取消并且重复列错误
【发布时间】:2017-04-24 17:28:14
【问题描述】:

当我写rails db:migrate 时,我得到这个错误:

bundle exec rake db:migrate

== 20161209073230 AddActivationToUsers:迁移 ============================= -- add_column(:users, :activation_digest, :string) rake 中止! StandardError:发生错误,此迁移和所有后续迁移 取消:

SQLite3::SQLException: 重复列名:activation_digest: ALTER 表“用户”添加“activation_digest”varchar

这是我的用户表:

create_users.rb

class CreateUsers < ActiveRecord::Migration 
  def change
     create_table :users do |t|
     t.string :name
       t.string :email

       t.timestamps null: false
     end 
  end 
end

这是我的add_activation_to_users.rb

class AddActivationToUsers < ActiveRecord::Migration
  def change
    add_column :users, :activation_digest, :string
    add_column :users, :activated, :boolean, default: false
    add_column :users, :activated_at, :datetime
  end
end

【问题讨论】:

  • 检查您的users 表,它可能已经有一个名为activation_digest 的列,您再次尝试使用迁移版本20161209073230 添加该列。
  • 这意味着我根本不需要添加任何迁移。对不起,我对 Ruby 完全陌生
  • 您可以从rails console查看您的用户模型的现有属性 - 使用User.column_names,如果您已经有activation_digest,则无需再次添加。
  • 是的,它确实有activation_digest。因此,我一直在尝试迁移我一直拥有的东西。谢谢

标签: ruby-on-rails ruby rails-console


【解决方案1】:

您的用户表中已经有activation_digest。 请检查您的 schema.rb。如果您尝试添加新列,则需要删除已经存在的列。

【讨论】:

    【解决方案2】:

    SQLite3::SQLException: 列名重复:activation_digest: ALTER TABLE "users" ADD "activation_digest" varchar

    正如异常所暗示的,您已经在users 表中添加了activation_digest

    您可以直接从rails consoleUser.column_names 检查users 表的列。

    【讨论】:

      猜你喜欢
      • 2015-10-18
      • 2016-04-18
      • 2017-01-03
      • 1970-01-01
      • 2012-10-31
      • 1970-01-01
      • 1970-01-01
      • 2018-09-24
      • 1970-01-01
      相关资源
      最近更新 更多