Sal-laS
Sal-laS

Reputation: 11639

Adding a column to an existing table

I used following code to add a field director to an existing movies table:

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

I have already seen this, but the difrence is I am insisting to use

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

when i run rake db:test:prepare and then i run my cucumber, it gives me the erorr:

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

this means that i failed to add the field director to the table movies, So what is wrong here?

Upvotes: 1

Views: 1001

Answers (3)

Chakreshwar Sharma
Chakreshwar Sharma

Reputation: 2610

Try the following code:

rails g migration AddDirector

then, in the corresponding migration def change add_column :movies, :director, :string end Execute , rake db:migrate

In the Movies controller, add "director" in the movie_params

Upvotes: 2

Akash
Akash

Reputation: 38

When you do any migration, it gets saved in schema

Rollback that migration, make changes and then migrate it again

If for example 20150923000732_create_movies.rb migration is your last migration you can rollback with:

rake db:rollback

Otherwise you can simply down your specific migration with VERSION:

rake db:migrate:down VERSION=20150923000732

After rollback your migration, change your migration file and migrate again.

Upvotes: 0

Yury Lebedev
Yury Lebedev

Reputation: 4005

The db:test:prepare recreates the db using the db/schema.rb.

This will fix your issue:

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

Upvotes: 0

Related Questions