Dan*_*npe 7 rake activerecord model ruby-on-rails
例如,我有这个模型:
class Product < ActiveRecord::Base
attr_accessible :name, :order
end
Run Code Online (Sandbox Code Playgroud)
然后,当我这样做时,rake db:migrate它创建了这个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
Run Code Online (Sandbox Code Playgroud)
但这一切都发生了,因为我用过 rails generate Product order:integer name:string
现在我转到产品型号并手动更改为:
class Product < ActiveRecord::Base
attr_accessible :name, :order, :category_id
validates :name, uniqueness: true
belongs_to :category
end
Run Code Online (Sandbox Code Playgroud)
如何使用更新自动更新db/migrate/20120825132038_create_products.rb?
dee*_*our 17
当你跑步时rake db:migrate,它没有创建db/migrate/20120825132038_create_products.rb.您运行时创建了该迁移文件
rails generate Product order:integer name:string
Run Code Online (Sandbox Code Playgroud)
attr_accessible 与迁移数据库无关.
我强烈建议您阅读有关迁移的Rails指南,以及讨论的批量分配部分attr_accessible.
要生成新的迁移文件(因为您的问题中提到的rake db:migrate文件已经由您提到的上一个命令处理),请运行
rails g migration AddCategoryIdToProduct category_id:integer
Run Code Online (Sandbox Code Playgroud)
这应该生成一个包含内容的新迁移
class AddCategoryIdToProduct < ActiveRecord::Migration
def change
add_column :products, :category_id, :integer
end
end
Run Code Online (Sandbox Code Playgroud)
rake db:migrate现在再次运行将处理此迁移文件,将新的category_id整数列添加到products表中.
小智 7
您可以通过运行重做迁移
rake db:migrate:up VERSION=20121031143418 #insert the timestamp on migration
Run Code Online (Sandbox Code Playgroud)
您也可以重做一次迁移(上下运行,但只有在你有一个向上和向下的情况下才有效,你只需要进行更改就不会这样做)
rake db:migrate:redo
Run Code Online (Sandbox Code Playgroud)