For example i have this model:
class Product < ActiveRecord::Base
attr_accessible :name, :order
end
Then when i did rake db:migrate
it created this db/migrate/20120825132038_create_products.rb:
class CreateProducts < ActiveRecord::Migration
def change
create_table :products do |t|
t.integer :order
t.string :name
t.timestamps
end
end
end
But it all happend cuz i used rails generate Product order:integer name:string
Now after i go to Product model and changes it manually to:
class Product < ActiveRecord::Base
attr_accessible :name, :order, :category_id
validates :name, uniqueness: true
belongs_to :category
end
How can i auto update the db/migrate/20120825132038_create_products.rb with the updates?
When you ran
rake db:migrate
, it did not createdb/migrate/20120825132038_create_products.rb
. That migration file was created when you ranattr_accessible
has nothing to do with migrating your database.I strongly recommend you read the Rails Guide on Migrations, as well as the section on Mass Assignment which discusses
attr_accessible
.To generate a new migration file (since the one mentioned in your Question has already been processed by the previous
rake db:migrate
command you mentioned running), runThis should generate a new migration with contents like
Running
rake db:migrate
again now will process this migration file, adding the newcategory_id
integer column to yourproducts
table.You can redo a migration by running
You can also redo a migration (runs up and down, but only works if you have an up and down, which you won't when you just have a change)