gem สำหรับแอป Rails เพื่อสร้างรหัสสตริงที่มีคำนำหน้า ตามด้วย nanoid คล้ายกับรหัสที่คุณเห็นใน api ของ stripe ยังสามารถค้นหาบันทึกใด ๆ ด้วย id ซึ่งคล้ายกับ globalid ของ Rails มีโพสต์บล็อกเบื้องต้นที่อธิบายว่าทำไมฉันถึงทำสิ่งนี้
ผู้ใช้คลาส < ActiveRecord::Base รวม CoolId::Model คำนำหน้า cool_id: "usr"endUser.create!(name: "...").id# => "usr_vktd1b5v84lr"
CoolId.locate("usr_vktd1b5v84lr")# => #<รหัสผู้ใช้: "usr_vktd1b5v84lr", ชื่อ: "John Doe">
เช่นสำหรับการแทรกหรืออัพแบทช์
User.generate_cool_id# => "usr_vktd1b5v84lr"
parsed = CoolId.parse("usr_vktd1b5v84lr")# => #<struct CoolId::Id key="vktd1b5v84lr", prefix="usr", id="usr_vktd1b5v84lr", model_class=User>parsed.model_class# => ผู้ใช้
ต้องใช้พารามิเตอร์เพื่อเปลี่ยนตัวอักษรหรือความยาว
ลูกค้าคลาส < ActiveRecord::Base รวม CoolId::Model คำนำหน้า cool_id: "cus" ตัวอักษร: "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ความยาว: 8endCustomer.create!(name: "...").id# => "cus_UHNYBINU"
และสิ่งเหล่านี้สามารถกำหนดค่าได้ทั่วโลก
CoolId.configure ทำ | config | config.separator = "-" config.letter = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" config.length = 8end
คุณสามารถใช้ cool_id กับฟิลด์แยกต่างหาก โดยคงคีย์หลักเริ่มต้นไว้:
class Product < ActiveRecord::Base รวม CoolId::Model cool_id คำนำหน้า: "prd", id_field: :public_iendproduct = Product.create!(name: "Cool Product")product.id # => 1 (หรือ uuid หรืออะไรก็ตามหลัก คีย์ที่คุณชอบ)product.public_id # => "prd_vktd1b5v84lr"# ค้นหาจะพบ thisCoolId.locate("prd_vktd1b5v84lr") # => #<รหัสผลิตภัณฑ์: 1, public_id: "prd_vktd1b5v84lr", ...>
แนวทางนี้ช่วยให้คุณหลีกเลี่ยงการเปิดเผยคีย์หลักของคุณ โปรดอ่านการสร้างคีย์ที่ไม่ซ้ำแบบเปิดเผยต่อสาธารณะของ David Bryant Copeland ควบคู่ไปกับคีย์หลักของคุณ เพื่อเรียนรู้ว่าทำไมคุณถึงต้องการทำเช่นนี้ นอกจากนี้ยังช่วยให้คุณนำ cool_id มาใช้ได้ง่ายขึ้นในโปรเจ็กต์ที่มีข้อมูลบางส่วนอยู่แล้ว
เพิ่ม cool_id ให้กับ Gemfile ของคุณ:
รวมกลุ่มเพิ่ม cool_id
อัญมณี "cool_id"
ไม่ต้องการที่จะจัดการกับการพึ่งพา? คัดลอกลงในโครงการของคุณ:
mkdir -p app/lib curl https://raw.githubusercontent.com/schpet/cool_id/main/lib/cool_id.rb -o app/lib/cool_id.rb
ใช้รหัสสตริงเมื่อสร้างตาราง
create_table :users, id: :string ทำ |t| t.string :nameend
รวมข้อกังวล CoolId::Model
ในโมเดลเรกคอร์ดที่ใช้งานอยู่ และตั้งค่าคำนำหน้า
ผู้ใช้คลาส < ActiveRecord::Base รวมถึง CoolId::Model คำนำหน้า cool_id: "usr"end
หมายเหตุ: หากคุณต้องการคีย์หลักแบบเดิมมากกว่า (เช่น bigints หรือ uuids) คุณสามารถใช้ id_field
ในคอลัมน์อื่นได้
คุณได้ดื่มคูลเลดแล้ว ตั้งค่า Rails เพื่อใช้รหัสสตริงในการโยกย้ายที่สร้างขึ้นใหม่ทั้งหมด
# config/initializers/generators.rbRails.application.config.generators ทำ |g| g.orm :active_record, primary_key_type: :stringend
จากนั้นตั้งค่า ApplicationRecord
เพื่อรวม cool id และตรวจสอบให้แน่ใจว่ามีการตั้งค่าในคลาสที่สืบทอดมา
# app/models/application_record.rbclass ApplicationRecord < ActiveRecord :: Base รวม CoolId :: Model primary_abstract_class enforce_cool_id_for_descendantsend
หากคุณใช้อินเทอร์เฟซโหนด graphql ruby คุณสามารถใช้การระบุวัตถุได้
# app/graphql/app_schema.rbclass AppSchema < GraphQL::Schema def self.id_from_object (วัตถุ, type_definition, query_ctx) object.id สิ้นสุด def self.object_from_id (id, query_ctx) CoolId.locate (id) สิ้นสุด