Rails迁移 - self.up和self.down的重点是什么

时间:2012-06-21 14:54:15

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 rake

我想知道那些意思是什么:

class ChangeTimeColumns < ActiveRecord::Migration
  def self.up
  end

  def self.down
  end
end

因为有时Rails只会创建这样的迁移:

class ChangeTimeColumns < ActiveRecord::Migration
  def change
  end
end

非常感谢任何澄清。

4 个答案:

答案 0 :(得分:3)

如果你犯了错误,就可以撤销迁移。

rake db:rollback   #this will rollback the most recent migration


rake db:rollback STEP=3  #this will rollback 3 of them

我将self.up和self.down添加到我的所有迁移中,如果存在无法撤消的迁移,则无法在down中包含down或raise异常。查看本指南的第4.1节====&gt; http://guides.rubyonrails.org/migrations.html#using-the-up-down-methods

答案 1 :(得分:1)

在当前版本的rails之前,self.up和self.down是标准格式,即在Rails 3.0.x中

self.up用于定义rake db:migrate上应该发生什么的行为,其中self.down定义了rake db:rollback的行为。变化是相对较新的,通常用于可以以微不足道的方式推断自我降低行为的地方。

答案 2 :(得分:0)

你在self.up中执行的每次INSERT,UPDATE等操作都会在self.down中执行相反的操作。

如果由于错误而必须稍后回滚这些迁移,这一点非常重要。

答案 3 :(得分:0)

任何模型的Self.up将属性插入到其中写入的模型表中。

虽然self.down与之相反。