Jawaban:
Pertama di terminal Anda:
rails g migration change_date_format_in_my_table
Kemudian di file migrasi Anda:
Untuk Rails> = 3.2:
class ChangeDateFormatInMyTable < ActiveRecord::Migration
def up
change_column :my_table, :my_column, :datetime
end
def down
change_column :my_table, :my_column, :date
end
end
change
metode tidak digunakan sebagai pengganti up
dan down
metode, itu karena para change
metode tidak mendukung change_column
definisi migrasi .
Juga, jika Anda menggunakan Rails 3 atau yang lebih baru, Anda tidak harus menggunakan up
dan down
metode. Anda bisa menggunakan change
:
class ChangeFormatInMyTable < ActiveRecord::Migration
def change
change_column :my_table, :my_column, :my_new_type
end
end
This migration uses change_column, which is not automatically reversible.
To make the migration reversible you can either:
1. Define #up and #down methods in place of the #change method.
2. Use the #reversible method to define reversible behavior.
Dalam Rails 3.2 dan Rails 4, jawaban populer Benjamin memiliki sintaks yang sedikit berbeda.
Pertama di terminal Anda:
$ rails g migration change_date_format_in_my_table
Kemudian di file migrasi Anda:
class ChangeDateFormatInMyTable < ActiveRecord::Migration
def up
change_column :my_table, :my_column, :datetime
end
def down
change_column :my_table, :my_column, :date
end
end
Ada metode change_column , jalankan saja dalam migrasi Anda dengan datetime sebagai tipe baru.
change_column(:my_table, :my_column, :my_new_type)
AFAIK, ada migrasi untuk mencoba membentuk kembali data yang Anda pedulikan (yaitu produksi) ketika membuat perubahan skema. Jadi, kecuali itu salah, dan karena dia memang mengatakan dia tidak peduli dengan data, mengapa tidak hanya memodifikasi tipe kolom dalam migrasi asli dari tanggal ke datetime dan menjalankan kembali migrasi? (Semoga Anda punya tes :)).
rake db:migrate:reset
.