【问题标题】:Differences between def up and def change in migration file迁移文件中 def up 和 def 变化的区别
【发布时间】:2013-07-04 16:10:44
【问题描述】:

def up; enddef change; end 有什么区别? 我有代码

class CreateTweets < ActiveRecord::Migration
  def change
    create_table :tweets do |t|
      t.string :status
      t.integer :zombie_id

      t.timestamps
    end
  end
end

如果我定义 def up 而不是 def change 会发生什么变化?

【问题讨论】:

    标签: ruby-on-rails database sqlite migration


    【解决方案1】:

    up 方法应伴随有一个down 方法,可用于撤消迁移的更改。例如,如果您在问题中使用 up 和 down 编写示例,则需要以下代码:

    class CreateTweets < ActiveRecord::Migration
      def up
        create_table :tweets do |t|
          t.string :status
          t.integer :zombie_id
    
          t.timestamps
        end
      end
    
      def down
        drop_table :tweets
      end
    end
    

    另一方面,change 方法可以被 Rails 自动反转,因此无需手动创建 down 方法。

    change 被引入以替换 updown,因为大多数 down 方法可以基于 up 方法轻松预测(在上面的示例中,drop_table 显然是 create_table 的反面)。

    在无法自动推导出反向运算的情况下,您可以使用updown 方法,或者从change 方法中调用reversible 方法。

    请参阅sections 3.6 - 3.7 of the Rails migration guide 了解更多信息。

    【讨论】:

      猜你喜欢
      • 2018-08-15
      • 2012-04-30
      • 2012-04-25
      • 1970-01-01
      • 2016-06-14
      • 2016-10-08
      • 2017-09-09
      • 2017-05-15
      • 1970-01-01
      相关资源
      最近更新 更多