Yanıtlar:
Terminalinizde bir ilk:
rails g migration change_date_format_in_my_table
Ardından taşıma dosyanızda:
Raylar için> = 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
yöntemi yerine kullanılmaz up
ve down
yöntemlerin, bunun sebebi yöntem desteklemez göç tanımı . change
change_column
Ayrıca, Rails 3 veya daha yenisini kullanıyorsanız up
ve down
yöntemlerini kullanmanız gerekmez . Sadece şunu kullanabilirsiniz 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.
Rails 3.2 ve Rails 4'te Benjamin'in popüler cevabının biraz farklı bir sözdizimi vardır.
Terminalinizde bir ilk:
$ rails g migration change_date_format_in_my_table
Ardından taşıma dosyanızda:
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
Bir change_column yöntemi var, bunu datetime ile yeni bir tür olarak taşıma işleminizde yürütün.
change_column(:my_table, :my_column, :my_new_type)
AFAIK, şema değişiklikleri yaparken önem verdiğiniz verileri (yani üretim) yeniden şekillendirmeye çalışmak için göçler var. Öyleyse bu yanlış olmadıkça ve verileri umursamadığını söylemiş olduğundan, neden yalnızca orijinal geçişteki sütun türünü tarihten tarih saatine değiştirip taşıma işlemini yeniden çalıştırmıyorsunuz? (Umarım testleriniz vardır :)).
rake db:migrate:reset
için bunun sebebi budur.