Trong khi câu trả lời được chấp nhận là tuyệt vời, tôi muốn thêm câu trả lời ở đây hy vọng thỏa thuận tốt hơn với câu hỏi áp phích gốc phần 2, cho các chuyên gia không thích bản thân tôi.
- How do I create a migration to replace the type of that column
tạo giàn giáo di cư
Bạn có thể tạo ra một sự chuyển đổi để giữ sự thay đổi của bạn bằng cách gõ vào giao diện điều khiển của bạn (chỉ cần thay thế các table
cho tên bảng của bạn, và column
cho bạn tên cột)
rails generate migrate change_table_column
Điều này sẽ tạo ra sự di chuyển bộ xương bên trong ứng dụng Rails/db/migrate/folder. Di chuyển này là trình giữ chỗ cho mã di chuyển của bạn.
Ví dụ tôi muốn tạo một sự chuyển đổi để thay đổi kiểu của một cột string
-text
, trong một bảng gọi là TodoItems:
class ChangeTodoItemsDescription < ActiveRecord::Migration
def change
# enter code here
change_column :todo_items, :description, :text
end
end
Chạy chuyển đổi của bạn
Một khi bạn đã đã nhập mã để thay đổi cột vừa chạy:
rake db:migrate
Để áp dụng di chuyển của bạn trên. Nếu bạn thực hiện một lỗi mà bạn luôn có thể phục hồi các thay đổi với:
rake db:rollack
Up and Down phương pháp
Các tài liệu tham khảo câu trả lời chấp nhận Up
và Down
phương pháp, thay vì phương pháp mới hơn Change
. Vì đường ray 3.2kiểu cũ Phương thức lên và xuống đã trình bày một số lợi thế so với phương pháp Thay đổi mới hơn. 'Lên và xuống' tránh ActiveRecord::IrreversibleMigration exception
. Kể từ khi phát hành Rails 4 bạn có thể sử dụng reversible
để tránh lỗi này:
class ChangeProductsPrice < ActiveRecord::Migration
def change
reversible do |dir|
change_table :products do |t|
dir.up { t.change :price, :string }
dir.down { t.change :price, :integer }
end
end
end
end
Thưởng thức Rails :)
Nguồn
2017-06-10 13:20:46
Great câu trả lời. Một lưu ý: Rails hiện không hỗ trợ change_column với phương thức thay đổi (http://guides.rubyonrails.org/migrations.html#using-the-change-method); nếu bộ nhớ phục vụ, bạn sẽ tạo ra một di chuyển không thể đảo ngược nếu bạn làm điều đó. Tốt hơn là nên làm theo cách cũ của trường với các phương pháp lên/xuống. – poetmountain
@BourbonJockey: Có nghĩa là 'thay đổi' sẽ không thể tự động đảo ngược thay đổi loại và [Hướng dẫn di chuyển] (http://guides.rubyonrails.org/migrations.html#anatomy-of-a- di chuyển) nói rằng "[phương pháp thay đổi] Phương pháp này được ưu tiên để viết di chuyển xây dựng (thêm cột hoặc bảng)" và 'change_column' không có trong danh sách bạn trỏ vào để tôi nghĩ bạn đúng. Tôi cố định nó để sử dụng 'up' /' down' (với lời cảnh báo về 'down'), cảm ơn những người đứng đầu. –
Để tham khảo trong tương lai của người đọc khác, chuyển đổi từ chuỗi thành văn bản trong Postgres trên Heroku theo cách này sẽ KHÔNG mất dữ liệu. –