Gem für Rails-Apps zum Generieren von String-IDs mit einem Präfix, gefolgt von einem Nanoid. Ähnlich den IDs, die Sie in der API von Stripe sehen. Kann jeden Datensatz auch anhand der ID suchen, ähnlich der Globalid von Rails. Es gibt einen einführenden Blogbeitrag, der erklärt, warum ich das gemacht habe.
class User < ActiveRecord::Base include CoolId::Model cool_id prefix: "usr"endUser.create!(name: "...").id# => "usr_vktd1b5v84lr"
CoolId.locate("usr_vktd1b5v84lr")# => #<Benutzer-ID: "usr_vktd1b5v84lr", Name: "John Doe">
zB für Batch-Inserts oder 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# => Benutzer
Es sind Parameter erforderlich, um das Alphabet oder die Länge zu ändern
Klasse Kunde < ActiveRecord::Base include CoolId::Model cool_id Präfix: „cus“, Alphabet: „ABCDEFGHIJKLMNOPQRSTUVWXYZ“, Länge: 8endCustomer.create!(name: „...“).id# => „cus_UHNYBINU“
und diese können global konfiguriert werden
CoolId.configure tun |config| config.separator = "-" config.alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" config.length = 8end
Sie können cool_id mit einem separaten Feld verwenden und dabei den Standard-Primärschlüssel beibehalten:
class Product < ActiveRecord::Base include CoolId::Model cool_id prefix: "prd", id_field: :public_idendproduct = Product.create!(name: "Cool Product")product.id # => 1 (oder eine UUID oder was auch immer primär Schlüssel, den Sie mögen)product.public_id # => "prd_vktd1b5v84lr"# finden wird finden thisCoolId.locate("prd_vktd1b5v84lr") # => #<Produkt-ID: 1, öffentliche_ID: "prd_vktd1b5v84lr", ...>
Dieser Ansatz ermöglicht es Ihnen, die Offenlegung Ihrer Primärschlüssel zu vermeiden. Lesen Sie „Create public-facing Unique Keys neben Ihren Primärschlüsseln“ von David Bryant Copeland, um zu erfahren, warum Sie dies tun sollten. Außerdem können Sie cool_id einfacher in ein Projekt übernehmen, das bereits über einige Daten verfügt.
Fügen Sie cool_id zu Ihrer Gemfile hinzu:
Bundle cool_id hinzufügen
Edelstein „cool_id“
Sie möchten sich nicht mit einer Abhängigkeit auseinandersetzen? Kopieren Sie es in Ihr Projekt:
mkdir -p app/lib curl https://raw.githubusercontent.com/schpet/cool_id/main/lib/cool_id.rb -o app/lib/cool_id.rb
Verwenden Sie beim Erstellen einer Tabelle Zeichenfolgen-IDs
create_table :users, id: :string do |t| t.string :nameend
Fügen Sie das CoolId::Model
Problem in das aktive Datensatzmodell ein und richten Sie ein Präfix ein
class User < ActiveRecord::Base include CoolId::Model cool_id prefix: „usr“end
Hinweis: Wenn Sie traditionellere Primärschlüssel (wie Bigints oder UUIDs) bevorzugen, können Sie das id_field
für eine andere Spalte verwenden.
Du hast das Coolaid getrunken. Richten Sie Rails ein, um String-IDs für alle neu generierten Migrationen zu verwenden
# config/initializers/generators.rbRails.application.config.generators do |g| g.orm :active_record, Primary_key_type: :stringend
Richten Sie dann ApplicationRecord
so ein, dass es die Cool-ID enthält, und stellen Sie sicher, dass es in Klassen eingerichtet ist, die davon erben
# app/models/application_record.rbclass ApplicationRecord < ActiveRecord::Base include CoolId::Model Primary_abstract_class Enforce_cool_id_for_descendantsend
Wenn Sie die Ruby-Knotenschnittstelle graphql verwenden, können Sie die Objektidentifizierung implementieren
# 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