DOJO004

  • Dashool 創辦人
  • 喜歡調酒
  • Rails、Nextjs、TypeScript

如何在 Rails 7 使用 uuid7 ?

Rails

為什麼要使用 UUID?

使用 rails 的朋友一定知道,在資料庫的 ID 都是使用流水號。
為了不讓有心人士猜到隱密資訊,使用 UUID 是相對安全許多的!

首先

我是使用 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

這樣就完成囉!!

參考資料
https://ptrchm.com/posts/rails-uuid-v7/

版權所有 © 2023 DOJO004

Deployed on Zeabur