迁移步骤发生变化,上下变化

时间:2016-03-08 18:39:18

标签: ruby-on-rails database postgresql ruby-on-rails-4 migration

我的问题非常简单。我创建了此迁移文件,我的移动列没有更改,但创建了def change。是因为rails忽略了def updef down?如果是这样的话?

def change
  add_column :posts, :address, :string
end


def up
 execute 'ALTER TABLE posts ALTER COLUMN mobile TYPE integer USING (mobile::integer)'
end

def down
  execute 'ALTER TABLE posts ALTER COLUMN mobile TYPE text USING (mobile::text)'

end

1 个答案:

答案 0 :(得分:0)

Rails不会通过设计同时运行change和up方法,因此忽略了change方法之后的所有内容。当您需要像Up和Down方法一样运行某些特定逻辑时,您有两种选择。您可以将更改方法中的内容放入上下方法中,也可以将上下内容放入更改方法中。如果您想以“Rails4”方式执行此操作,则应使用changereversible方法来获取所需内容:

class SomeMigration < ActiveRecord::Migration

 def change
    add_column :posts, :address, :string

    reversible do |change|
      change.up do
       execute 'ALTER TABLE posts ALTER COLUMN mobile TYPE integer USING (mobile::integer)'
      end

      change.down do
        execute 'ALTER TABLE posts ALTER COLUMN mobile TYPE text USING (mobile::text)'
      end
    end
  end