Tổng Hợp Các Câu Lênh Cơ Bản Của Rails Migration


Câu lệnh cơ bản
Ruby
# 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.
Ruby
#create table
$ rails g model model_name field_name:type:(unique|index) các_thông_số_khác
Ví dụ create table
Default
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    |              
+------------+--------------+------+-----+---------+
Ruby
$ 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
irb
# 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ó.
irb
$ rails g migration ChangeColumnToUser
File ChangeColumnToUser định nghĩa như sau
Ruby
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
irb
$ rails g migration AddColumnToUser age:integer
File AddColumnToUser được định viết như sau:
Ruby
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
irb
$ rails g migration AddIndexToUser
Ruby
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.

Comments