Rails Migration Change vs Up&向下方法

时间:2014-01-02 19:39:29

标签: ruby-on-rails ruby rails-activerecord rails-migrations

我正在阅读Rails Test Prescriptions一书,在设置过程中,它要求我将迁移文件更改为以下内容:

class ProjectUserJoin < ActiveRecord::Migration
  def self.up
    create_table :projects_users, :force => true, :id => false do |t|
      t.references :project
      t.references :user
      t.timestamps
    end
  end

  def self.down
    drop_table :projects_users
  end
end

我似乎在Rails(4.0.0)上使用的是比书(2或3.x)更高的版本,我的迁移文件如下所示:

class ProjectUserJoin < ActiveRecord::Migration
  def change
  end
end

如何编辑更改方法以执行与上述上下方法相同的操作?到目前为止,我尝试使用up和down而不是self.up和self.down并使用相同的代码进行复制。那没起效。

谢谢!

4 个答案:

答案 0 :(得分:6)

只需使用def change内容更改def self.up

您可以通过在控制台运行rake db:migrate来检查结果 - 它将创建表(self.up功能)和rake db:rollback - 它将删除表(self.down功能)。< / p>

答案 1 :(得分:3)

up/down的{​​{1}}迁移看起来像这样:

change

更改方法可以根据您提供的创建/更新信息自动确定所需的向下操作。它不是原始self.up / self.down方法的完全替代品,但是因为您采取的一些数据库操作Rails无法自动确定相应的up / down操作是什么。例如,如果您需要运行任意SQL语句class ProjectUserJoin < ActiveRecord::Migration def change create_table :projects_users, :force => true, :id => false do |t| t.references :project t.references :user t.timestamps end end end

答案 2 :(得分:2)

使用更改更简单,迁移应该看起来像

class ProjectUserJoin < ActiveRecord::Migration
def change
    create_table :projects_users, :force => true, :id => false do |t|
      t.references :project
      t.references :user
      t.timestamps
    end
  end
end

答案 3 :(得分:1)

上下方法仍然有效,但他们称之为

  

旧式迁移

。您可能想要了解有关Rails Guide

的有效记录迁移的更多信息