user993797
user993797

Reputation: 145

changes to model in ruby on rails

All,

I need clarification on how model changes need to tracked in ruby on rails. I started off by creating a model with say two fields, name and email. Here is what i have done

  1. Created a model by running

"rails generate model user first_name:string last_name:string"

This created a model file

  1. I then added some validations to the files created in user
  2. Used the annotation gem to annotate the class
  3. used "bundle exec rake db:migrate" to move my model to database which created the tables

I now want to add a couple more fields to the model. What steps do i need to follow?

  1. Do i add columns to the database and run some command so that the model(class) is in sync with the db?

  2. Do i delete and recreate the whole model with the new fields?

what is the recommended approach Venu

Upvotes: 0

Views: 428

Answers (3)

John Beynon
John Beynon

Reputation: 37507

You want to use a migration to update the existing table, you can do the entire process from the command line

Assuming you've done

rails generate model user first_name:string last_name:string

previously you would add fields like so;

rails generate migration AddFieldsToModel new_field:string another_field:string....

Rails does magic on the 'AddFieldsToModel' and works out the table name from the value for you.

Once you've created the migration you can look at it in db/migrations and then if you're happy with it just run

rake db:migrate

this will update your database to add the new fields to it. You don't need to do anything to the actual model.rb file - but you will need to re run the annotate task to have it reannotated to the model.rb file.

Upvotes: 1

tomciopp
tomciopp

Reputation: 2752

What you want to do is run a migration by typing. rails generate migration description_of_migration. This will create an empty migration which you can define what you want to add to your model. In your case it may be something like this:

class DescriptionOfMigration < ActiveRecord::Migration

self.up 
 add_column :users, :email, :string  
end

self.down
 remove_column :users, :email
end

end

This makes it so you can migrate both ways on the model.

Upvotes: 0

harshit
harshit

Reputation: 7951

I am not sure what version of rails your are using .. but int rails 3.x it can be done as

rails generate migration add_fields_user

this creates a file in db/migrate/[timestamp]/add_fields_user.rb

now you can write in the file and run rake db:migrate

add_column :users , :city, :string

Upvotes: 0

Related Questions