gema para aplicaciones Rails para generar identificadores de cadena con un prefijo, seguido de un nanoide. similar a los identificadores que ves en la API de Stripe. También puede buscar cualquier registro por identificación, similar al globalid de Rails. Hay una publicación de blog introductoria que explica por qué hice esto.
clase Usuario < ActiveRecord::Base incluye CoolId::Modelo cool_id prefijo: "usr"endUser.create!(nombre: "...").id# => "usr_vktd1b5v84lr"
CoolId.locate("usr_vktd1b5v84lr")# => #<ID de usuario: "usr_vktd1b5v84lr", nombre: "John Doe">
por ejemplo, para inserciones por lotes o upserts
User.generate_cool_id# => "usr_vktd1b5v84lr"
parsed = CoolId.parse("usr_vktd1b5v84lr")# => #<struct CoolId::Id key="vktd1b5v84lr", prefix="usr", id="usr_vktd1b5v84lr", model_class=Usuario>parsed.model_class# => Usuario
se necesitan parámetros para cambiar el alfabeto o la longitud
clase Cliente < ActiveRecord::Base incluye CoolId::Modelo cool_id prefijo: "cus", alfabeto: "ABCDEFGHIJKLMNOPQRSTUVWXYZ", longitud: 8endCustomer.create!(nombre: "...").id# => "cus_UHNYBINU"
y estos se pueden configurar globalmente
CoolId.configure hacer |config| config.separator = "-" config.alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" config.length = 8end
puedes usar cool_id con un campo separado, manteniendo la clave principal predeterminada:
clase Producto < ActiveRecord::Base incluye CoolId::Model cool_id prefijo: "prd", id_field: :public_idendproduct = Product.create!(nombre: "Cool Product")product.id # => 1 (o un uuid o lo que sea principal clave que le guste)product.public_id # => "prd_vktd1b5v84lr"# localizar encontrará thisCoolId.locate("prd_vktd1b5v84lr") # => #<Id. del producto: 1, public_id: "prd_vktd1b5v84lr", ...>
este enfoque le permite evitar exponer sus claves principales; lea Crear claves únicas públicas de David Bryant Copeland junto con sus claves principales para saber por qué es posible que desee hacer esto. también te permite adoptar cool_id más fácilmente en un proyecto que ya tiene algunos datos.
agregue cool_id a su Gemfile:
paquete agregar cool_id
gema "cool_id"
¿No quieres lidiar con una dependencia? cópialo en tu proyecto:
mkdir -p app/lib curl https://raw.githubusercontent.com/schpet/cool_id/main/lib/cool_id.rb -o app/lib/cool_id.rb
use identificadores de cadena al crear una tabla
create_table :usuarios, id: :string do |t| t.cadena: fin del nombre
incluya la preocupación CoolId::Model
en el modelo de registro activo y configure un prefijo
clase Usuario < ActiveRecord::Base incluye CoolId::Modelo prefijo cool_id: "usr"end
nota: si prefiere claves primarias más tradicionales (como bigints o uuids), puede usar id_field
en una columna diferente.
Te has bebido el coolaid. configurar rieles para usar identificadores de cadena en todas las nuevas migraciones generadas
# config/initializers/generators.rbRails.application.config.generators hacer |g| g.orm: registro_activo, tipo_clave_primaria:: cadenaend
luego configure ApplicationRecord
para incluir una identificación interesante y asegúrese de que esté configurada en las clases que heredan de ella
# app/models/application_record.rbclass ApplicationRecord < ActiveRecord::Base incluye CoolId::Model clase_abstracta_primaria enforce_cool_id_for_descendantsend
Si usa la interfaz del nodo Graphql Ruby, puede implementar la identificación de objetos.
# 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