ruby-on-rails - ruby rails : adding columns to existing database

标签 ruby-on-rails ruby ruby-on-rails-3 migration rails-migrations

我收到一个错误:

SQLite3::SQLException: no such column: ideas.list_id: 
SELECT "ideas".* FROM "ideas"  
WHERE "ideas"."list_id" = 2

但是我加了

t.integer :list_id

到我的数据库迁移文件:

class CreateIdeas < ActiveRecord::Migration
  def change
    create_table :ideas do |t|
      t.string :name
      t.text :description
      t.string :picture

      t.timestamps
    end
    add_foreign_key :ideas, :lists
  end
end

这给了我这个:

class CreateIdeas < ActiveRecord::Migration
  def change
    create_table :ideas do |t|
      t.string :name
      t.text :description
      t.string :picture
      t.integer :list_id
      t.timestamps
    end
    add_foreign_key :ideas, :lists
  end
end

然后我输入

rake db:migrate

知道为什么我会收到一条错误消息说没有专栏吗?我对 RoR 还是陌生的。我必须以其他方式添加一列吗?

谢谢

最佳答案

正如 Speransky 所建议的,您永远不应该修改旧的迁移文件。相反,您应该创建一个新的迁移来添加所需的列。例如,在这种情况下,您将在您的应用中运行以下命令来创建新的迁移:

rails generate migration AddListIdColumnToIdeas list_id:integer

Rails 会自动生成迁移文件,唯一要做的就是运行 rake db:migrate

如果你坚持修改旧的迁移文件,你可以像以前一样添加列并运行以下命令:

rake db:drop
rake db:create
rake db:migrate

这将破坏您当前的数据库,创建一个新数据库并运行所有迁移(其中将包括您的新列)。

关于ruby-on-rails - ruby rails : adding columns to existing database,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16259687/

相关文章:

ruby-on-rails - Capistrano 3 assets :precompile takes hours. 在 css 文件处停止

ruby-on-rails - 如何在 JSON API 的 RSpec 测试中传递身份验证 token ?

ruby httparty 在发布后获取响应 url 或 id

Ruby 2.0 无法在 OS X 上提取源代码

ruby-on-rails - Capistrano 中的 "role"到底是什么?

jquery - 在 Rails 3 中的嵌套模型表单中动态添加字段

ruby-on-rails - 为什么 Ruby on Rails 书籍或引用文献总是说 Update 是 PUT 而 Destroy 是 DELETE 而不是?

mysql - Ruby on Rails:未初始化的常量 MysqlCompat::MysqlRes

javascript - capybara 和JavaScript : checking for visibility requires huge amounts of time! 如何优化?

ruby-on-rails - 提高此服务器代码的性能以查找域?