在初步学rails,做depot的例子。每次进行数据迁移的时候,总要出错,我最初采取的办法是删掉迁移文件,重新建一次。刚开始还好,只是一两个文件,但是越到后面,数据迁移文件越多,我要是重新修改了001_create_products.rb文件后,还得删掉5个迁移文件(我现在只做到005_create_line_items.rb),那就麻烦了。前段时间记得朋友跟我说过关于这个的做法,不过一直没弄明白,今天自己试了一下,一下清楚多了。
  我现在5个数据迁移文件
   
  做到付账即将结束的时候,发现004_create_orders.rb里创建表的的字段写错一个。于是修改,保存。之后让rails知道你所做的一切,那就是数据迁移。
  首先,退回到003的迁移文件,运行命令如下:
   
E:\rails\depot>rake db:migrate version=3
(in E:/rails/depot)
E:/rails/depot/config/boot.rb:20:Warning: Gem::SourceIndex#search support for St
ring patterns is deprecated
== CreateLineItems: reverting =================================================
-- drop_table(:line_items)
   -> 0.0310s
== CreateLineItems: reverted (0.0470s) ========================================
== CreateOrders: reverting ====================================================
-- drop_table(:orders)
   -> 0.0470s
== CreateOrders: reverted (0.0470s) ===========================================
此时,已经退回到第三个迁移文件过后的版本,现在重新进行一下迁移,004和005两个迁移文件都会一起迁移过来。
  
E:\rails\depot>rake db:migrate
(in E:/rails/depot)
E:/rails/depot/config/boot.rb:20:Warning: Gem::SourceIndex#search support for St
ring patterns is deprecated
== CreateOrders: migrating ====================================================
-- create_table(:orders)
   -> 0.0940s
== CreateOrders: migrated (0.0940s) ===========================================
== CreateLineItems: migrating =================================================
-- create_table(:line_items)
   -> 0.0780s
-- execute("alter table line_items add constraint fk_line_item_products foreign
key(product_id) references products(id)   ")
   -> 0.2030s
-- execute("alter table line_items add constraint fk_line_item_orders foreign ke
y(order_id) references orders(id)")
   -> 0.1560s
== CreateLineItems: migrated (0.4370s) ========================================
这不是太大技术性的问题,不过得出一个结论:要是自己不会的东西,问人,一下能解决了,但是印象不深,以后碰到同样的问题依然不会解决;自己动手解决,得到的不只是问题的永久解决,还会得一个愉快心情。
         以此文章,当作对自己的鼓励。