Tôi cần chuyển đổi các trường string
thành integer
và sử dụng enum
thay thế. Cách tốt nhất để làm điều này mà không làm mất dữ liệu là gì?Rails 4 di chuyển để thay đổi kiểu dữ liệu cột từ chuỗi thành số nguyên và sao lưu dữ liệu (postgres)
Đây là di cư hiện tại:
class CreateSystems < ActiveRecord::Migration
def change
create_table :systems do |t|
t.string :operation
t.string :status
t.timestamps null: false
end
end
end
Sau đó, tôi thay đổi loại của các lĩnh vực như sau:
class ChangeColumnsForSystems < ActiveRecord::Migration
def change
change_column :systems, :operation, :integer
change_column :systems, :status, :integer
end
end
Và cập nhật mô hình tập tin.
/app/models/system.rb
...
enum operation { start: 0, stop: 1 }
enum status { init: 0, working: 1, complete: 2 }
...
Làm thế nào tôi có thể cập nhật dữ liệu cũ?
di cư này sẽ làm hỏng tất cả dữ liệu, bởi vì khi bạn gọi '.to_i' trên một chuỗi, bạn sẽ luôn có được 0. mảnh tiếp theo của mã sẽ làm việc như mong đợi. Tuy nhiên nó không phải là giải pháp tốt nhất 'sys.operation = System.operations [sys.operation_str]' – Pav31