原创作者: hideto   阅读:1022次   评论:0条   更新时间:2011-05-26    
我们平时做Migrations时除了更改schema,还经常需要更改data
但我们以前的Migrations可能不工作,因为data之间可能有依赖关系
我们可以通过在Migrations里定义Model来解决该问题:
class AddPositionToProducts < ActiveRecord::Migration
  class Product < ActiveRecord::Base; end
  class SoftwareProduct < Product; end
  class CourseProduct < Product; end

  def self.up
    add_column :products, :position, :integer
    Product.reset_column_information
    SoftwareProduct.find(:all).inject(0) do |i, p|
      p.update_attribute(:position, i)
       i+1
    end
    CourseProduct.find(:all).inject(0) do |i, p|
      p.update_attribute(:position, i)
      i+1
    end
  end

  def self.down
    remove_column :products, :position
  end
end

这里我们在Migration里面定义Model,相当于给Model加了一个名字空间AddPositionToProducts::Product,这就能保证该Model在你的migrations里是唯一的
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

文章信息

Global site tag (gtag.js) - Google Analytics