如何在 Rails 7 使用 uuid7 ?
Rails
![](/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsiZGF0YSI6IjI4MTExZTQwLTYzMWUtNDljNy1iZjU0LWEyNzRlZGZiODk5ZiIsInB1ciI6ImJsb2JfaWQifX0=--ee93a803074349f6f09803f395cce6a1ea763ab9/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJwbmciLCJsb2FkZXIiOnsibiI6LTF9LCJyZXNpemVfdG9fbGltaXQiOlsxMDI0LDc2OF19LCJwdXIiOiJ2YXJpYXRpb24ifX0=--589eab3cb219aa7003ba9652c21b627759a6f0bb/%E6%9C%AA%E5%91%BD%E5%90%8D%E8%A8%AD%E8%A8%88.png)
為什麼要使用 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