【问题标题】:Ruby on Rails duplicate column name: user_id: ALTER TABLE "articles" ADD "user_id" integerRuby on Rails 重复列名:user_id: ALTER TABLE "articles" ADD "user_id" integer
【发布时间】:2016-08-09 16:01:19
【问题描述】:

我不断收到错误消息:-- add_column(:articles, :user_id, :integer) 耙中止! StandardError:发生错误,此迁移和所有后续迁移已取消:

SQLite3::SQLException: 列名重复:user_id: ALTER TABLE "articles" ADD "user_id" integer

这是我所做的所有迁移:

 class AddUserIdToArticles < ActiveRecord::Migration
  def change
    add_column :articles, :user_id, :integer
  end
end

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

class AddDescriptionToArticles < ActiveRecord::Migration
  def change
    add_column :articles, :description, :text
    add_column :articles, :created_at, :datetime
    add_column :articles, :updated_at, :datetime
  end
end

class CreateArticles < ActiveRecord::Migration
  def change
    create_table :articles do |t|
      t.string :title
    end
  end
end

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4


    【解决方案1】:

    错误开启

    class AddUserIdToArticles < ActiveRecord::Migration
      def change
        add_column :articles, :user_id, :integer
      end
    end
    

    因为user_id列已经存在于表articles

    您可以通过将代码更改为:

    class AddUserIdToArticles < ActiveRecord::Migration
      def change
        unless column_exists? :articles, :user_id
          add_column :articles, :user_id, :integer
        end
      end
    end
    

    但我不建议这样做,该列不应该首先存在,或者您只是想添加一个已经存在的列。

    顺便说一句,我建议为您的外键添加索引,例如 user_id

    【讨论】:

    • @MikeShasaco 如果我的回答对您有所帮助,请随时给我投票并将我的回答标记为已接受,这就是 stackoverflow 的工作方式;)
    猜你喜欢
    • 2014-11-04
    • 2012-05-15
    • 2019-09-17
    • 1970-01-01
    • 1970-01-01
    • 2014-09-24
    • 2013-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多