string
のフィールドをinteger
に変換し、代わりにenum
を使用する必要があります。 データを失うことなくこれを行う最善の方法は何ですか?列4のデータ型を文字列から整数に戻し、データを保持する(ポストグル)
これは、現在の移行です:
class CreateSystems < ActiveRecord::Migration
def change
create_table :systems do |t|
t.string :operation
t.string :status
t.timestamps null: false
end
end
end
それから私はそうのようなフィールドの種類を変更します。
class ChangeColumnsForSystems < ActiveRecord::Migration
def change
change_column :systems, :operation, :integer
change_column :systems, :status, :integer
end
end
とモデルファイルを更新します。
/app/models/system.rb
...
enum operation { start: 0, stop: 1 }
enum status { init: 0, working: 1, complete: 2 }
...
どのように私は古いデータを更新することができますか?あなたは2移行でそれを行うことができます
この移行は、破損し、すべてのデータは、あなたが文字列の '.to_i'呼び出すときので、あなたは常に期待通りのコードの0 次の作品がうまくいくでしょうします。しかし、それは最善の解決策ではありません。 'sys.operation = System.operations [sys.operation_str]' – Pav31