【问题标题】:Adding a column to an existing table向现有表中添加列
【发布时间】:2015-11-06 11:29:36
【问题描述】:

我使用以下代码将字段 director 添加到现有的 movies 表中:

class CreateMovies < ActiveRecord::Migration
  def up
    create_table :movies do |t|
      t.string :title
      t.string :rating
      t.text :description
      t.datetime :release_date

      # Add fields that let Rails automatically keep track
      # of when movies are added or modified:
      t.timestamps
    end

    add_column :movies, :director, :string
  end


  def down
    drop_table :movies
  end
end

我已经看过this,但不同的是我坚持使用

 rake db:test:prepare command after i add my new field.

当我运行rake db:test:prepare 然后我运行我的cucumber 时,它给了我错误:

  unknown attribute 'director' for Movie. (ActiveRecord::UnknownAttributeError)

这意味着我未能将字段director 添加到table movies, 那么这里有什么问题呢?

【问题讨论】:

标签: ruby-on-rails rake


【解决方案1】:

试试下面的代码:

rails g migration AddDirector

那么,在对应的migration def change add_column :movies, :director, :string end 执行,rake db:migrate

在 Movies 控制器中,在 movie_params 中添加“director”

【讨论】:

    【解决方案2】:

    db:test:prepare 使用db/schema.rb 重新创建数据库。

    这将解决您的问题:

    bin/rake db:rollback
    bin/rake db:migrate
    

    【讨论】:

      【解决方案3】:

      当您进行任何迁移时,它会保存在架构中

      回滚迁移,进行更改,然后再次迁移

      如果例如 20150923000732_create_movies.rb 迁移是您可以回滚的最后一次迁移:

      rake db:rollback
      

      否则,您可以简单地使用 VERSION 降低您的特定迁移:

      rake db:migrate:down VERSION=20150923000732
      

      回滚迁移后,更改迁移文件并再次迁移。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-21
        • 2023-03-10
        • 2015-12-25
        • 1970-01-01
        • 2014-12-12
        • 2023-04-04
        • 2011-06-17
        • 2020-06-26
        相关资源
        最近更新 更多