Rails 6 giới thiệu if_not_exists khi tạo bảng dữ liệu

Tram Ho

Rails 6 bổ sung thêm tùy chọn if_not_exists để create_table tùy chọn tạo ra một bảng nếu nó không tồn tại.

Giá trị mặc định của if_not_existsfalse

Trước Rails 6 chúng ta có thể làm được điều này không?. Hoàn toàn có thể nhưng cách viết nó sẽ dài hơn.

Trước rails 6 ta sử dung ActiveRecord :: Base.connection.table_exists? để kiểm tra một bảng có tồn tại hay chưa khi create_table

1. Rails 5.2

Tạo 1 bảng users trong Rails 5.2

Bây giờ tạo lại bảng users với tùy chọn if_not_exists

Chúng ta có thể thấy rằng rails 5.2 bỏ qua tùy chọn if_not_exists, và cố gắng tạo lại bảng

Bây giờ hãy thử ActiveRecord :: Base.connection.table_exists? với rails 5.2

Dựa vào kết quả trên chúng ta có thể thấy rằng create_table: :users đã không được chạy vì ActiveRecord::Base.connection.table_exists?('users') trả về kết quả true

2. Rails 6

Bây giờ tạo bảng users trong rails 6 với tùy chọn if_not_exists = true

Nhìn vào ví dụ trên. Chúng ta có thể thấy không có ngoại lệ nào được đưa ra khi chúng ta tạo lại bẳng users lần thứ 2

Bây giờ tạo lại bảng users với tùy chọn if_not_exists = false

Một ngoại lệ được bắn ra vì tùy chọn if_not_exists = false

Đây là pull request liên quan

Nguồn tham khảo
https://blog.bigbinary.com/2019/05/22/rails-6-adds-if_not_exists-option-to-create_table.html
https://api.rubyonrails.org/v5.2/classes/ActiveRecord/ConnectionAdapters/SchemaStatements.html#method-i-table_exists-3F

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo