Migration là 1 trong những tính năng của Active record có thể chấp nhận được chúng ta biến đổi cả cấu trúc và tài liệu trong database. Txuất xắc vị đổi khác trực tiếp vào database thì Rails có thể chấp nhận được các bạn sử dụng Ruby DSL nhằm mô tả bài toán chuyển đổi các table.Tiện cách đây không lâu dự án công trình mình gặp mặt sự việc về migration bắt buộc bản thân viết bài viết này. Bài tân oán đưa ra là Khách mặt hàng ao ước rollback migration về thời gian nào kia chỉ để chạy code ngơi nghỉ version làm sao đó thôi cơ mà chưa hẳn code bây giờ. Và thời điểm kia mặt mình đã rollbachồng dẫu vậy bị lỗi rollback mà trong lúc code k ai nghĩ về mang đến ngôi trường đúng theo kia cả. Đó cũng là 1 vấn đề mà lại ta đề nghị làm rõ hơn về migration để rời đa số ngôi trường phù hợp những điều đó.Sau Lúc phát âm nội dung bài viết chúng ta cũng có thể hiểu thêm về:
Hiểu về migration, những bí quyết tạoCác phương pháp chạy migration, rollback chúngHiểu thêm về schemaMigration là một trong bí quyết dễ ợt nhằm biến đổi cấu tạo bảng với dữ liệu trong database một cách tiện lợi. Bằng cách sử dụng Ruby DSL bạn k cần phải viết SQL thủ công bằng tay, nó có thể giúp cho bạn biến đổi database 1 cách độc lậpTưởng tượng mỗi migration tương xứng vs 1 version của database. Ban đầu, schema là rỗng, với những lần migration thì vẫn modify nhằm add hoặc remove table, columns hoặc rows. Active record biết phương pháp để update schema theo thời hạn. Và từ bỏ bất cứ thời khắc nào vào quá khứ đọng cũng hoàn toàn có thể update version của schema cho bản tiên tiến nhất. Active sầu record cũng trở thành update file db/schema.rb để làm mang đến thống tuyệt nhất với cấu tạo mới nhất của database.Chúng ta cùng xem qua ví dụ về 1 migration:
class CreateProducts Đây là một migration chế tạo ra bảng products vào database. Có 2 ngôi trường chính là name với mô tả tìm kiếm. Một cột khóa chính là id cũng trở nên được phân phối sau khi chạy migration này, đấy là khóa chủ yếu khoác định đến tất cả mã sản phẩm của Active sầu Record. timestamps đang tiếp tế bảng 2 cột đó là : created_at cùng updated_at. Các cột này sẽ được làm chủ auto vì chưng ActiveRecord nếu bọn chúng tồn tạiTrước Lúc tiến hành migration thì ko mãi mãi table nào cả. Run migration thì table sẽ được sinh ra. Và Active record cũng có thể có phương pháp để baông xã lại mẫu migration lúc nãy bằng phương pháp là Rollbachồng lại chiếc migration đó thì bảng được chế tạo ra ngày trước sẽ ảnh hưởng xóa.Ta cũng có thể viết migration theo cách khác để gọi bí quyết nó rollback:
class ChangeProductsPrice dir.up là chạy migration. dir.down là chạy rollbaông xã lại, trở về thời gian trước lúc chạy migrationlấy một ví dụ như nếu như bọn họ change_column thì rollbaông xã có khả năng sẽ bị lỗi, bắt buộc viết code theo kiểu này.
Bạn đang xem: Migrate là gì
$ bin/rails generate migration AddPartNumberToProductsCau lệnh sẽ khởi tạo ra 1 migration mới:
class AddPartNumberToProducts Nếu migration thương hiệu gồm dạng "AddXXXToYYY" hoặc "RemoveXXXFromYYY" sẽ khởi tạo ra các migration add_column hoặc remove_column. Ta có thể cung ứng những column cùng type của chúng theo sau:
$ bin/rails generate migration AddPartNumberToProducts part_number:stringsẽ tạo ra:
class AddPartNumberToProducts Các migration mang tên theo mô hình CreateXXX với theo sau là danh sách các thương hiệu column cùng type của chúng sẽ tạo ra table mang tên XXX với gần như column sẽ liệt kê. Ví dụ:
$ bin/rails generate migration CreateProducts name:string part_number:stringSẽ tạo nên migration:
class CreateProducts
$ bin/rails generate Model Product name:string description:textNó sẽ tạo nên ra 1 migration new như sau:
class CreateProducts Quý Khách rất có thể thêm những cột khác nếu muốn
)Rails cung cấp 1 tập thích hợp của bin/rails tasks để chạy migrationTrước hết câu lệnh chúng ta hay được sử dụng tuyệt nhất đó là rails db:migrate . Ở phía trên nó chỉ chạy các migration không chạy,. những migration chạy rồi nó đã k chạy lại nữa. Nó đang đuổi theo sản phẩm từ bỏ thời gianMột chú ý là lúc chạy db:migrate nó cũng trở nên tự động chạy db:schema:dump để cập nhập tệp tin db/schema.rb đến trùng khớp với cấu trúc database của bạnNếu bạn muốn chạy 1 migration ví dụ. bạn có thể chạy bằng cách rước tên version là dãy số lâu năm sinh hoạt tệp tin migration và chạy:
Rollbaông xã được thực hiện Khi họ tạo nên không đúng 1 migration với mong sửa bọn chúng, muốn quay trở lại trên thời khắc chạy migration lỗi đó. Ta rất có thể trở lại migration trước bởi cách:
$ bin/rails db:rollbackNó đã rollback tại thời khắc tiên tiến nhất của migration, nếuý muốn rollbaông chồng lại những version trước kia nữa thì chỉ định và hướng dẫn parameter STEP. Ví dụ:
$ bin/rails db:rollbachồng STEP=3Nó sẽ revert 3 migration gần nhất.Ta cần sử dụng db:migrate:revị để chạy roll baông xã và migration lại:
$ bin/rails db:migrate:rebởi vì STEP=3Đây là những cách giúp chúng ta sửa không đúng những migration mà không nhất thiết phải reset migration.
Một xem xét khi chế tạo ra migration họ nên chất vấn xem nó bao gồm rollbachồng được hay không ^^. cũng có thể nó sẽ không rollbachồng được bởi vì những nguyên do. lấy ví dụ nhỏng change_column thì sẽ không rollbachồng dc, hoặc Lúc ta thêm ĐK vào nhằm chạy migration.
Ta sử dụng db:cài đặt sẽ giúp tạo nên database với load schema cùng khởi sản xuất bọn chúng cùng với seed.
Xem thêm: Hướng Dẫn Làm Tờ Khai Thuế Gtgt Trên Htkk Nộp Qua Mạng Mới Nhất 2021
Dùng db:reset nhằm dropdatabase với thiết lập lại nó. Nó tương tự với 2 câu lệnh: db:drop và db:setup.
Nếu bạn muốn chạy 1 migration cùng với up hoặc down, ta rất có thể sử dụng db:migrate:up cùng db:migrate:down. Và thêm version đằng sau nhằm khẳng định chính là tệp tin migration nào
Mặc đinc ví như chạy db:migrate nó vẫn điều khiển xe trên môi trường xung quanh development. Nếu bạn có nhu cầu nó chạy xe trên các môi trường khác thì chỉ việc thêm đổi mới môi trường xung quanh vào đằng tiếp nối là RAILS_ENV. Tại đây bạn muốn chạy migrate trên môi trường thiên nhiên test:
$ bin/rails db:migrate RAILS_ENV=test
Có 2 phương pháp để Dump schema. Cách dump thì được setting vào tệp tin config/application.rb của config.active_record.schema_format. Chỉ định sql Hoặc là :rubyNếu chỉ định :ruby thì schema sẽ tiến hành giữ sinh hoạt db/schema.rb. Msống file này có chắc chắn rất có thể thấy được giống như là một bảng migration béo.
class AddInitialProducts Để thêm dữ liệu sau thời điểm database được tạo nên. Rails bao gồm một kĩ năng có thể giúp quá trình này trở đề nghị lập cập. Bằng cách thêm code vào db/seeds.rb với chạy rails db:seed.
5.times vì chưng |i| Product.create(name: "Product ##i", description: "A hàng hóa.")endBài viết đến đó là ngừng rồi. Hi vọng bài viết có thể mang lại lợi ích cho bạn, giúp bạn phát âm rộng về migration.!
Nguồn tyêu thích khảo:http://edgeguides.rubyonrails.org/active_record_migrations.html#changing-existing-migrations