无法rake db:migrate

时间:2014-03-19 17:20:41

标签: ruby-on-rails ruby ubuntu console

我遇到了One Month Rails应用程序的问题。

我已经

rails generate migration add_user_id_to_pins user_id:integer:index
但是当我在生成迁移后尝试直接运行
rake db:migrate
时,我收到此错误:

    ==  AddUserIdToPins: migrating ================================================
-- add_column(:pins, :user_id, :integer)
rake aborted!
An error has occurred, this and all later migrations canceled:

SQLite3::SQLException: duplicate column name: user_id: ALTER TABLE "pins" ADD "user_id"     integer/home/colin/.rvm/gems/ruby-2.0.0-p451/gems/sqlite3-    1.3.9/lib/sqlite3/database.rb:91:in `initialize'
/home/colin/.rvm/gems/ruby-2.0.0-p451/gems/sqlite3-1.3.9/lib/sqlite3/database.rb:91:in     `new'
/home/colin/.rvm/gems/ruby-2.0.0-p451/gems/sqlite3-1.3.9/lib/sqlite3/database.rb:91:in `prepare'
/home/colin/.rvm/gems/ruby-2.0.0-p451/gems/sqlite3-1.3.9/lib/sqlite3/database.rb:134:in `execute'
/home/colin/.rvm/gems/ruby-2.0.0-p451/gems/activerecord-4.0.3/lib/active_record/connection_adapters/sqlite3_adapter.rb:331:in `block in execute'
/home/colin/.rvm/gems/ruby-2.0.0-p451/gems/activerecord-4.0.3/lib/active_record/connection_adapters/abstract_adapter.rb:435:in `block in log'
/home/colin/.rvm/gems/ruby-2.0.0-p451/gems/activesupport-4.0.3/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
/home/colin/.rvm/gems/ruby-2.0.0-p451/gems/activerecord-4.0.3/lib/active_record/connection_adapters/abstract_adapter.rb:430:in `log'
/home/colin/.rvm/gems/ruby-2.0.0-p451/gems/activerecord-4.0.3/lib/active_record/connection_adapters/sqlite3_adapter.rb:331:in `execute'
/home/colin/.rvm/gems/ruby-2.0.0-p451/gems/activerecord-4.0.3/lib/active_record/connection_adapters/abstract/schema_statements.rb:360:in `add_column'
/home/colin/.rvm/gems/ruby-2.0.0-p451/gems/activerecord-4.0.3/lib/active_record/connection_adapters/sqlite3_adapter.rb:454:in `add_column'
/home/colin/.rvm/gems/ruby-2.0.0-p451/gems/activerecord-4.0.3/lib/active_record/migration.rb:625:in `block in method_missing'

这些是我通过迁移生成的文件的内容:

    class AddUserIdToPins < ActiveRecord::Migration
  def change
    create_table :pins do |t|
      t.integer :user_id
      t.timestamps
    end
    add_index :pins, :user_id
  end
  def change
        Pins.reset_column_information    
    add_column :pins, :user_id, :integer
    add_index :pins, :user_id 
    end
end

我认为这可能是因为我多次尝试生成迁移,但我删除了以前的迁移,所以我不确定是什么原因导致的。

1 个答案:

答案 0 :(得分:1)

您正尝试在数据库中添加user_id列两次。 创建引脚表时,user_id列会添加到pins表中。 请注意,迁移失败在线(您尝试再次将user_id添加到引脚表)

add_column(:pins, :user_id, :integer) rake aborted!

def change
    create_table :pins do |t|
      t.integer :user_id  ## Added first time
      t.timestamps
    end
    add_index :pins, :user_id
 end
def change
    Pins.reset_column_information    
    add_column :pins, :user_id, :integer ## Adding second time : Here you get the error 
    add_index :pins, :user_id 
end

迁移文件应如下所示:

class AddUserIdToPins < ActiveRecord::Migration
  def change
    create_table :pins do |t|
      t.integer :user_id
      t.timestamps
    end
    add_index :pins, :user_id
    Pin.reset_column_information ## Model name should be singular
  end
end