我的问题非常简单。我创建了此迁移文件,我的移动列没有更改,但创建了def change
。是因为rails忽略了def up
和def 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
答案 0 :(得分:0)
Rails不会通过设计同时运行change和up方法,因此忽略了change方法之后的所有内容。当您需要像Up和Down方法一样运行某些特定逻辑时,您有两种选择。您可以将更改方法中的内容放入上下方法中,也可以将上下内容放入更改方法中。如果您想以“Rails4”方式执行此操作,则应使用change
和reversible
方法来获取所需内容:
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