Tổng hợp về rails generate migration
Bài đăng này đã không được cập nhật trong 7 năm
Đối với những ai làm rails thì chắc có lẽ đã quá quen thuộc với câu lệnh
rails generate migration ...
thường dùng để thay đổi DB. Sau đây mình sẽ tổng hợp lại những câu lệnh mà mình thường dùng. **Tạo migration thay đổi db **
#tạo migration
rails generate migration class_name
class_name trong file migration ở đây chúng ta có thể đặt là thế nào cũng được. Nhưng chúng ta nên tự tao quy tắc của chúng ta, và để sau này chúng ta dễ hiểu. Mình thường đặt class_name theo cấu trúc "action+table_name". ví dụ: add_column_to_user Trong file này sẽ thêm các xử lý để thay đổi schema. Tạo model
#tạo model
rails generate migration NAME [field[:type][:index] field[:type][:index]] [options]
ví dụ tạo model user:
rails g model User uuid:string:unique name:string
id, created_at, updated_at được thêm vào tự động. *Định dạng: *
- 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 Trong 2 phần trên chỉ mới là câu lênh để tạo migration nhưng chưa có gì thay đổi DB cả. Bây giờ sẽ là những câu lệnh liên quan để thay đổi DB:
- Để tạo ra schema từ những file migration đã tạo chúng ta dùng lệnh:
rake db:migrate
một chú ý nhỏ là nếu dùng rails version >5.0 thì chúng ta có thể thay "rake" bằng "rails"
- Để rollback:
rake db:rollback
rollback the last 3 migration
rake db:rollback STEP=3
rollback lại đúng version mà mình muốn
rake db:rollback VERSION=0
- Để kiểm tra xem câu lệnh trên có thực hiện ra sao ta có thể dùng câu lệnh:
rake db:migrate:status
- add multi column vào table đã tạo
rails generate migration NAME [field[:type][:index] field[:type][:index]] [options]
ví dụ:
rails generate migration AddDetailsToUsers name:string salary:decimal email:string
lúc này file migration tạo ra sẽ như sau:
class AddDetailsToUsers < ActiveRecord::Migration[5.0]
def change
add_column :users, :name, :string
add_column :users, :salary, :decimal
add_column :users, :email, :string
end
end
- Add a reference column vào table
rails generate migration AddTeamRefToUsers team:references
file migration được tạo ra:
class AddTeamRefToUsers < ActiveRecord::Migration[5.0]
def change
add_reference :users, :team, foreign_key: true
end
end
nếu muốn thêm index và foreign_key vào column
rails generate migration AddTeamRefToUsers team:references:index
file migration được tạo ra:
class AddTeamRefToUsers < ActiveRecord::Migration
def change
add_reference :users, :team, index: true
add_foreign_key :users, :teams
end
end
- ở trên chúng ta có rollback thì cũng phải có redo:
rake db:migrate:redo
cũng giống rollback thì redo cũng tương tự khi muốn quay trở về lần migration nào đó:
rake db:migrate:redo STEP=3
- Bên trên chúng ta có add column vào tbale thì bây giờ chúng ta có remove:
rails generate migration RemoveNameFromUsers name:string
file migration này sẽ được tạo ra:
class RemoveNameFromUsers < ActiveRecord::Migration[5.0]
def change
remove_column :users, :name, :string
end
end
- chúng ta chạy migration ở môi trường khác nhau :
rake db:migrate RAILS_ENV=test
Trên đây là những câu lệnh mà mình hay sử dụng. Mọi người thấy còn thiếu hay sai xót gì thì xin hãy bổ sung. Bài viết được tham khảo: http://guides.rubyonrails.org/active_record_migrations.html
All rights reserved