Migration theo mình hiểu đó là cách để vừa thay đổi database vừa phản ánh được từng giai đoạn thay đổi của nó.
Ví dụ đơn giản để tạo bảng users
trong database
Đoạn code trên khi chạy sẽ tạo bảng users
có 2 cột là name
kiểu dữ liệu là string
và age
kiểu dữ liệu là integer
. 2 kiểu vừa đề cập tương ứng với kiểu dữ liệu trong sql là varchar(255)
và int(4)
, có thể tham khảo thêm ở đây. Dòng cuối cùng gọi hàm timestamps
để tạo thêm hai cột created_at
và updated_at
. (được viết sẵn từ Rails)
Với migration này ta có thể tạo mới bảng hoặc nếu muốn quay ngược trở lại bước này có thể dùng rails db:rollback
. Nếu muốn viết gì mà Active Record không biết tự động rollback lại thì ta phải chỉ cho nó biết bằng cách dùng
hoặc reversible
up, down
, ví dụ:
Viết migration
Có thể tạo bằng tay hoặc là viết lệnh, nếu tạo bằng tay thì phải tự thêm timestamp trước tên file, dựa vào timestamps này để chạy migrate theo thứ tự, và sau nay nếu có chạy rollback thì cũng biết đường mà rollback cho đúng, nếu muốn nhanh hơn thì dùng lệnh, ví dụ
$ rails g migraion CreateUsers name:string age:integer
Nhớ: khi tạo mới bảng thì migration có dạng Create
+ tên bảng, còn khi thêm thì Add
+ cột + To
+ tên bảng, bỏ cột thì Remove
+ cột + From
+ tên bảng. Có thể tạo luôn cả bảng join từ lệnh kiểu như này.
$ rails g migration CreateJoinTableUserDevice user device
API các hàm dùng cho migration nằm ở các link này: ActiveRecord::ConnectionAdapters::SchemaStatements, ActiveRecord::ConnectionAdapters::TableDefinition, ActiveRecord::ConnectionAdapters::Table