جوهرة لتطبيقات Rails لإنشاء معرفات سلسلة ببادئة، متبوعة بـ nanoid. مشابه للمعرفات التي تراها في واجهة برمجة التطبيقات الخاصة بالشريط. قادر أيضًا على البحث عن أي سجل حسب المعرف، على غرار المعرف العالمي لـ Rails. هناك مشاركة مدونة تمهيدية تشرح سبب قيامي بذلك.
فئة المستخدم < ActiveRecord::Base تتضمن CoolId::Model بادئة Cool_id: "usr"endUser.create!(name: "...").id# => "usr_vktd1b5v84lr"
CoolId.locate("usr_vktd1b5v84lr")# => #<معرف المستخدم: "usr_vktd1b5v84lr"، الاسم: "John Doe">
على سبيل المثال لإدراج دفعة أو upserts
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!(الاسم: "...").id# => "cus_UHNYBINU"
ويمكن تهيئتها عالميًا
CoolId.configure قم بـ |config| config.separator = "-" config.alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" config.length = 8end
يمكنك استخدام Cool_id مع حقل منفصل، مع الاحتفاظ بالمفتاح الأساسي الافتراضي:
فئة المنتج < ActiveRecord::Base تتضمن CoolId::Model بادئة Cool_id: "prd"، id_field: :public_idendproduct = 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's إنشاء مفاتيح فريدة عامة بجانب مفاتيحك الأساسية لتعرف سبب رغبتك في القيام بذلك. كما يسمح لك باستخدام 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 do |t| t.string :nameend
قم بتضمين اهتمامات CoolId::Model
في نموذج السجل النشط وقم بإعداد بادئة
فئة المستخدم < ActiveRecord::Base تتضمن CoolId::Model بادئة Cool_id: نهاية "usr"
ملاحظة: إذا كنت تفضل المفاتيح الأساسية التقليدية (مثل bigints أو uuids)، فيمكنك استخدام id_field
في عمود مختلف.
لقد شربت المرطب. إعداد القضبان لاستخدام معرفات السلسلة في جميع عمليات الترحيل الجديدة التي تم إنشاؤها
# config/initializers/generators.rbRails.application.config.generators do |g| g.orm :active_record، basic_key_type: :stringend
ثم قم بإعداد ApplicationRecord
ليشمل معرفًا رائعًا وتأكد من إعداده في الفئات التي ترث منه
# app/models/application_record.rbclass ApplicationRecord < ActiveRecord::Base include CoolId::Model basic_abstract_classفرض_cool_id_for_descendantsend
إذا كنت تستخدم واجهة عقدة graphql Ruby، فيمكنك تنفيذ تحديد الكائن
# app/graphql/app_schema.rbclass AppSchema < GraphQL::Schema def self.id_from_object(object, type_definition, query_ctx) object.id end def self.object_from_id(id, query_ctx) CoolId.locate(id) endend