Update db/migrate after manually updating models?

一笑奈何 提交于 2019-12-20 10:47:09

问题


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?


回答1:


When you ran rake db:migrate, it did not create db/migrate/20120825132038_create_products.rb. That migration file was created when you ran

rails generate Product order:integer name:string

attr_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), run

rails g migration AddCategoryIdToProduct category_id:integer

This should generate a new migration with contents like

class AddCategoryIdToProduct < ActiveRecord::Migration
  def change
    add_column :products, :category_id, :integer
  end
end

Running rake db:migrate again now will process this migration file, adding the new category_id integer column to your products table.




回答2:


You can redo a migration by running

rake db:migrate:up VERSION=20121031143418 #insert the timestamp on migration

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)

rake db:migrate:redo


来源:https://stackoverflow.com/questions/12122087/update-db-migrate-after-manually-updating-models

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!