截至目前,我有一个包含列的用户表
id, name, email, status
status
field 是一个整数类型,其值 1 和 2 分别代表一个活跃用户和非活跃用户。
我想将status
字段更改为字符串类型并迁移数据 - 将 1 转换为“活动”,将 2 转换为“非活动”
我生成了2个迁移文件rails g migration
user.rb
class User < ApplicationRecord
module Status
ACTIVE = 'Active'.freeze
INACTIVE = 'Inactive'.freeze
ALL = [ACTIVE, INACTIVE].freeze
end
validates :status, presence: true
validates :status, inclusion: Status::ALL
end
db/migrate/20190906115523_update_user_status_type.rb
def UpdateUserStatusType < ActiveRecord::Migration[5.2]
def up
change_column :users, :status, :string, default: User::Status::ACTIVE,
end
def down
User.where(status: User::Status::ACTIVE).update_all(status: 1)
User.where(status: User::Status::INACTIVE).update_all(status: 2)
change_column :users, :status, :integer, default: 1
end
end
db/migrate/20190906115828_update_user_statuses.rb
def UpdateUserStatuses < ActiveRecord::Migration[5.2]
def data
User.where(status: 1).update_all(status: User::Status::ACTIVE)
User.where(status: 2).update_all(status: User::Status::INACTIVE)
end
end
运行后rails db:migrate
Expected:
迁移完成后,每个用户的状态都应转换为“活动”或“非活动”。
Actual Results:
每个用户的状态都转换为"0"
字符串类型。