bli*_*ini 25 model ruby-on-rails
我有一个类型列的模型integer,我想转换为类型string.现在我正在寻找更改列类型而不丢失数据的最佳方法.有没有一种无痛的方法来实现这一目标?
Jon*_*Jon 37
使用change_column方法的标准迁移将整数转换为字符串而不会丢失任何数据.如果需要,rake db:rollback也会执行反向迁移而不会出错.
以下是我用于确认此行为的测试迁移:
class ChangeAgeToString < ActiveRecord::Migration
def self.up
change_column :users, :age, :string
end
def self.down
change_column :users, :age, :integer
end
end
Run Code Online (Sandbox Code Playgroud)
对于迁移中的 postgres
change_column :table_name, :field,'boolean USING (CASE field WHEN \'your any string as true\' THEN \'t\'::boolean ELSE \'f\'::boolean END)'
Run Code Online (Sandbox Code Playgroud)
和任何类似的有效类型
对于postgresql,将表列数据类型更改integer为string,
rails migration like this with up and down actions
class ChangeAgeToString < ActiveRecord::Migration
def self.up
change_column :users, :age, 'varchar USING CAST(age AS varchar)', null: false
end
def self.down
change_column :users, :age, 'integer USING CAST(age AS integer)', null: false, default: 0
end
end
Run Code Online (Sandbox Code Playgroud)