0

Tổng hợp về rails g migration

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

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí