Câu trả lời:
Đầu tiên trong thiết bị đầu cuối của bạn:
rails g migration change_date_format_in_my_table
Sau đó, trong tệp di chuyển của bạn:
Đối với đường ray> = 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
phương không được sử dụng thay cho up
và down
phương pháp, đó là vì các change
phương pháp không hỗ trợ các change_column
định nghĩa di cư .
Ngoài ra, nếu bạn đang sử dụng Rails 3 hoặc mới hơn, bạn không phải sử dụng các phương thức up
và down
. Bạn chỉ có thể sử dụng 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.
Trong Rails 3.2 và Rails 4, câu trả lời phổ biến của Benjamin có cú pháp hơi khác nhau.
Đầu tiên trong thiết bị đầu cuối của bạn:
$ rails g migration change_date_format_in_my_table
Sau đó, trong tệp di chuyển của bạn:
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
Có một phương thức change_column , chỉ cần thực hiện nó trong di chuyển của bạn với datetime là một kiểu mới.
change_column(:my_table, :my_column, :my_new_type)
AFAIK, di chuyển ở đó để cố gắng định hình lại dữ liệu bạn quan tâm (nghĩa là sản xuất) khi thực hiện thay đổi lược đồ. Vì vậy, trừ khi điều đó sai và vì anh ta đã nói rằng anh ta không quan tâm đến dữ liệu, tại sao không sửa đổi loại cột trong di chuyển ban đầu từ ngày sang datetime và chạy lại di chuyển? (Hy vọng bạn đã có bài kiểm tra :)).
rake db:migrate:reset
dành cho.