permata untuk aplikasi Rails untuk menghasilkan id string dengan awalan, diikuti oleh nanoid. mirip dengan id yang Anda lihat di api Stripe. juga dapat mencari catatan apa pun berdasarkan id, mirip dengan globalid Rails. ada postingan blog pengantar yang menjelaskan mengapa saya membuat ini.
kelas Pengguna < ActiveRecord::Base sertakan CoolId::Model cool_id awalan: "usr"endUser.create!(nama: "...").id# => "usr_vktd1b5v84lr"
CoolId.loc("usr_vktd1b5v84lr")# => #<User id: "usr_vktd1b5v84lr", nama: "John Doe">
misalnya untuk sisipan atau upsert batch
Pengguna.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# => Pengguna
dibutuhkan parameter untuk mengubah alfabet atau panjangnya
kelas Pelanggan < ActiveRecord::Base include CoolId::Model cool_id awalan: "cus", alfabet: "ABCDEFGHIJKLMNOPQRSTUVWXYZ", panjang: 8endCustomer.create!(nama: "...").id# => "cus_UHNYBINU"
dan ini dapat dikonfigurasi secara global
CoolId.configure lakukan |config| config.separator = "-" config.alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" config.length = 8end
Anda dapat menggunakan cool_id dengan bidang terpisah, dengan tetap menggunakan kunci utama default:
class Product < ActiveRecord::Base include CoolId::Model cool_id prefix: "prd", id_field: :public_idendproduct = Product.create!(name: "Cool Product")product.id # => 1 (atau uuid atau primer apa pun kunci yang Anda suka)product.public_id # => "prd_vktd1b5v84lr"# cari akan ditemukan thisCoolId.loc("prd_vktd1b5v84lr") # => #<ID produk: 1, public_id: "prd_vktd1b5v84lr", ...>
pendekatan ini memungkinkan Anda menghindari pemaparan kunci utama Anda, baca buku Membuat kunci unik yang dapat dilihat publik oleh David Bryant Copeland di samping kunci utama Anda untuk mempelajari mengapa Anda mungkin ingin melakukan hal ini. ini juga memungkinkan Anda untuk mengadopsi cool_id dengan lebih mudah dalam proyek yang sudah memiliki beberapa data.
tambahkan cool_id ke Gemfile Anda:
bundel tambahkan cool_id
permata "id_keren"
tidak ingin berurusan dengan ketergantungan? salin ke proyek Anda:
mkdir -p app/lib curl https://raw.githubusercontent.com/schpet/cool_id/main/lib/cool_id.rb -o app/lib/cool_id.rb
gunakan id string saat membuat tabel
buat_tabel :pengguna, id: :string lakukan |t| t.string :nama akhir
sertakan masalah CoolId::Model
dalam model rekaman aktif dan siapkan awalan
kelas Pengguna < ActiveRecord::Base sertakan CoolId::Model cool_id awalan: "usr"end
catatan: jika Anda lebih suka kunci utama tradisional (seperti bigints atau uuids), Anda dapat menggunakan id_field
pada kolom lain.
kamu sudah meminum coolaidnya. siapkan rel untuk menggunakan id string pada semua migrasi baru yang dihasilkan
# config/initializers/generators.rbRails.application.config.generators melakukan |g| g.orm :catatan_aktif, tipe_kunci_utama: :stringend
lalu atur ApplicationRecord
untuk memasukkan id keren dan memastikan pengaturannya di kelas yang mewarisinya
# app/models/application_record.rbclass ApplicationRecord < ActiveRecord::Base sertakan CoolId::Model primary_abstract_class penegak_cool_id_for_descendantsend
jika Anda menggunakan antarmuka simpul rubi graphql, Anda dapat mengimplementasikan identifikasi objek
# 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.location(id) endend