Tổng hợp về rails g migration
Bài đăng này đã không được cập nhật trong 8 năm
Tiếp theo seri một số bài viết giới thiệu cho người mới làm quen với Rails, tuần này mình sẽ giới thiệu với các bạn tổng hợp 1 số câu lệnh về rails g migrate.
Câu lệnh cơ bản
# create migration
$ rails generate migration class_name
# tạo model
$ rails generate model model_name
class_name có thể đặt tùy ý, nhưng tốt nhất là tạo thói quen đặt tên theo cấu trúc “action + table name”. Khi đó, Rails sẽ tạo 1 file /db/migrate/timestamp_class_name.rb.
#create table
$ rails g model model_name field_name:type:(unique|index) các_thông_số_khác
Ví dụ create table
mysql> desc users;
+------------+--------------+------+-----+---------+
| Field | Type | Null | Key | Default |
+------------+--------------+------+-----+---------+
| id | int(11) | NO | PRI | NULL |
| name | varchar(255) | YES | | NULL |
| created_at | datetime | YES | | NULL |
| updated_at | datetime | YES | | NULL |
+------------+--------------+------+-----+---------+
$ rails g model User name:string
#id, created_at, updated_at được thêm vào tự động.
Type
string: chuỗi kí tự ngắn
text: chuỗi kí tự dài
integer
float: số phức
decimal : số phức (độ chính xác cao hơn)
datetime
timestamp: thêm các field created_at, updated_at
time
date
binary
boolean
Thực hành
Khi thực hành các câu lệnh trên thì rails mới chỉ tạo ra file migration chứ chưa có thay đổi trong DB. Để thay đổi bạn cần phải thực hiện lệnh rake
# thực hiện
$ rake db:migrate
# rollback
$ rake db:rollback
# xác nhận
$ rake db:migrate:status
Trong trường hợp muốn thay đổi column đã có.
$ rails g migration ChangeColumnToUser
File ChangeColumnToUser định nghĩa như sau
class ChangeColumnToUser< ActiveRecord::Migration
# method định nghĩa những thay đổi
def up
change_column :users, :name, :string, null: false, default: 0
end
# method để có thể quay về trạng thái trước đó
def down
change_column :users, :name, :string, null: true, default: 0
end
end
Trong ví dụ trên, column name trong model User bị thay đổi thành NOT NULL. up và down là 2 method được sử dụng trước và sau quá trình migration, hay nói cách khác là cách để rollback lại.
Thêm hoặc xóa colum
$ rails g migration AddColumnToUser age:integer
File AddColumnToUser được định viết như sau:
class AddColumnToUser < ActiveRecord::Migration
def change
# Add
add_column :users, :age, :integer
# Remove
remove_column :users, :age, :integer
# chỉ định vị trí thêm vào
add_column :users, :age, :integer, :after => :name
end
end
Thêm hoặc xóa index
Giả sử muốn thêm/xoá index của column name trong User
$ rails g migration AddIndexToUser
class AddIndexToUser < ActiveRecord::Migration
def change
# Add
add_index :users, :name
# Delete
remove_index :users, :name
# Trường hợp tạo index cho nhiều columns
add_index :users, [:name, :name2]
end
end
Trên đây là một số tôngr hợp về Rails g migrate hy vọng sẽ giúp các bạn phần nào khi bắt đầu làm quen với rails.
Hẹn gặp lại trong các bài sau
All rights reserved