Notes về rails migrations

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à stringage 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)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_atupdated_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 reversible hoặc 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

Bình luận về bài viết này