如何在 Rails 7 使用 uuid7 ?
Rails
為什麼要使用 UUID?
使用 rails 的朋友一定知道,在資料庫的 ID 都是使用流水號。
為了不讓有心人士猜到隱密資訊,使用 UUID 是相對安全許多的!
為了不讓有心人士猜到隱密資訊,使用 UUID 是相對安全許多的!
首先
我是使用 PG 當作資料庫。
需要先安裝 pgcrypto。
先進入 pg 交互式介面
需要先安裝 pgcrypto。
先進入 pg 交互式介面
psql -U <user_name> -d <database_name>
建立 pgcrypto 擴充
CREATE EXTENSION IF NOT EXISTS pgcrypto
開始囉
建立一個 migration
rails g migration EnablePgcrypto
這個檔案編輯成這樣
class EnablePgcrypto < ActiveRecord::Migration[7.1] def change enable_extension 'pgcrypto' end end
再將以下程式碼放置 config/application.rb
config.generators do |generate| generate.orm :active_record, primary_key_type: :uuid end
新的 model 將會使用 UUID 作為 primary keys。
但目前還只是使用 UUIDv4,我們需要升級他。
bundle add uuid7
必須在資料儲存到資料庫以前,先建立 primary keys。
我們在 AplicationRecord 使用 before_create 來實現。
class ApplicationRecord < ActiveRecord::Base primary_abstract_class before_create :generate_uuid_v7 private def generate_uuid_v7 return if self.class.attribute_types['id'].type != :uuid self.id ||= UUID7.generate end end