12/08/2018, 14:48

Tổng hợp về rails generate migration

Đố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 ...

Đố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

0