将列添加到现有表

时间:2015-11-06 11:29:36

标签: ruby-on-rails rake

我使用以下代码将字段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时,它给了我一个erorr:

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

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

3 个答案:

答案 0 :(得分:2)

请尝试以下代码:

rails g migration AddDirector

然后,在相应的迁移中 def change add_column :movies, :director, :string end 执行,rake db:migrate

在电影控制器中,添加&#34;导演&#34;在movie_params中

答案 1 :(得分:0)

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

这将解决您的问题:

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

答案 2 :(得分:0)

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

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

如果您的上一次迁移是20150923000732_create_movies.rb迁移,则可以使用以下命令回滚:

rake db:rollback

否则,您可以使用VERSION简化特定的迁移:

rake db:migrate:down VERSION=20150923000732

回滚迁移后,请更改迁移文件并重新迁移。