Tổng quan về migration trong ruby on rails
Xin chào các bạn đã đến với chủ đề Migration của mình, chắc hẳn trong các bạn hầu hết đều đã từng mắc hoặc thắc mắc về các lỗi cơ bản của Migration khi lập trình bằng rails. Đầu tiên mình xin được giới thiệu qua về Migration. Dưới đây là một ví dụ (ở đây mình chỉ dùng rails 5 nhé) của ...
Xin chào các bạn đã đến với chủ đề Migration của mình, chắc hẳn trong các bạn hầu hết đều đã từng mắc hoặc thắc mắc về các lỗi cơ bản của Migration khi lập trình bằng rails.
Đầu tiên mình xin được giới thiệu qua về Migration.
Dưới đây là một ví dụ (ở đây mình chỉ dùng rails 5 nhé) của Migration:
class CreateProducts < ActiveRecord::Migration[5.0] def change create_table :products do |t| t.string :name t.text :description t.timestamps end end end
Migration này cho biết một mảng có tên là Products với một cột là name với kiểu dữ liệu là String và một cột là description với kiểu dữ liệu là text, bạn thấy có timestamps, ở đây nó định nghĩa cho cột updated_at và created_at do rails trực tiếp quản lý với thời gian thực hệ thống của bạn.
Để mysql tạo table bạn phải chạy lệnh sau:
rails db:migrate
Để có thể tạo ra được file như vậy, bạn có thể gõ lệnh như sau:
rails g model Product name:string, description:text
Hệ thống sẽ tạo cho bạn một file với tên db/migrate/xxxxxxxxxx_create_products.rb với nội dung như đầu mình nói, xxxxxxxxxx ở đây là thời gian của hệ thống mà rails tự chèn vào cho các bạn.
Nếu muốn thay đổi tên một cột hoặc kiểu dữ liệu của một cột, bạn có thể dùng câu lệnh như trên để tạo ra file thực hiện nhu cầu của bạn. Ví dụ ở đây mình muốn thay đổi tên cột. Đầu tiên tạo file để làm việc đó, bạn gõ:
rails g migration RenameColumn
Trong file được sinh ra các bạn sửa như sau:
class RenameColumn < ActiveRecord::Migration def change rename_column :products, :name, :name_product end end
Rồi chạy:
rails db:migrate
Bạn sẽ thay đổi cột name của table products thành name_product
Bạn có thể hủy thao tác trước đó bằng lệnh sau:
rails db:rollback STEP=X
X ở đây là số migration gần nhất bị hủy.
Nếu tên migration có dạng "AddXXXToYYY" hoặc "RemoveXXXFromYYY" và được theo sau bởi một danh sách các tên cột và các loại sau đó một sự chuyển đổi có chứa thích hợp add_column và remove_column sẽ được tạo ra. Ví dụ:
rails g migration AddPartNumberToProducts part_number:string
Khi đó ta sẽ được file có nội dung:
class AddPartNumberToProducts < ActiveRecord::Migration[5.0] def change add_column :products, :part_number, :string end end
Nếu bạn muốn thêm một chỉ mục trên các cột mới, bạn có thể làm điều đó như:
rails g migration AddPartNumberToProducts part_number:string:index
Khi đó bạn sẽ có một file với nội dung:
class AddPartNumberToProducts < ActiveRecord::Migration[5.0] def change add_column :products, :part_number, :string add_index :products, :part_number end end
Tương tự khi bạn muốn xóa một cột nào đó khỏi bảng mong muốn chỉ việc thay "Add" bằng "Remove"
Ta có các phương pháp đối với nội dung của phương pháp change
- add_column - add_foreign_key - add_index - add_reference - add_timestamps - change_column_default (phải cung cấp :from và :to) - change_column_null - create_join_table - create_table - disable_extension - drop_join_table - drop_table (phải cung cấp một tên bảng) - enable_extension - remove_column (phải cung cấp một cột) - remove_foreign_key (phải cung cấp một bảng thứ hai) - remove_index - remove_reference - remove_timestamps - rename_column - rename_index - rename_table
Trên đây là bài giới thiệu tổng quan về migration của mình, nếu có thiếu sót gì mong mọi người bỏ qua cho.
Xin cảm ơn các bạn đã xem.