Rails 앱용 gem은 접두어와 그 뒤에 nanoid가 있는 문자열 ID를 생성합니다. 스트라이프의 API에 표시되는 ID와 유사합니다. 또한 Rails의 globalid와 유사하게 ID별로 모든 레코드를 조회할 수 있습니다. 내가 이것을 만든 이유를 설명하는 소개 블로그 게시물이 있습니다.
class User < ActiveRecord::Base include CoolId::Model cool_id 접두사: "usr"endUser.create!(name: "...").id# => "usr_vktd1b5v84lr"
CoolId.locate("usr_vktd1b5v84lr")# => #<사용자 ID: "usr_vktd1b5v84lr", 이름: "John Doe">
예를 들어 일괄 삽입 또는 upsert의 경우
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# => 사용자
알파벳이나 길이를 변경하려면 매개변수가 필요합니다.
class Customer < ActiveRecord::Base include CoolId::Model cool_id 접두사: "cus", 알파벳: "ABCDEFGHIJKLMNOPQRSTUVWXYZ", 길이: 8endCustomer.create!(이름: "...").id# => "cus_UHNYBINU"
전역적으로 구성할 수 있습니다.
CoolId.configure do |config| config.separator = "-" config.alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" config.length = 8end
기본 기본 키를 유지하면서 별도의 필드와 함께 Cool_id를 사용할 수 있습니다.
class Product < ActiveRecord::Base include CoolId::Model cool_id prefix: "prd", id_field: :public_idendproduct = Product.create!(name: "Cool Product")product.id # => 1(또는 uuid 또는 기본 항목) 원하는 키)product.public_id # => "prd_vktd1b5v84lr"# 찾아보면 찾을 수 있습니다 thisCoolId.locate("prd_vktd1b5v84lr") # => #<제품 ID: 1, public_id: "prd_vktd1b5v84lr", ...>
이 접근 방식을 사용하면 기본 키 노출을 피할 수 있습니다. David Bryant Copeland의 기본 키와 함께 공개 고유 키 만들기를 읽고 이 작업을 수행하려는 이유를 알아보세요. 또한 이미 일부 데이터가 있는 프로젝트에서 Cool_id를 더 쉽게 채택할 수 있습니다.
Gemfile에 cool_id를 추가하세요:
번들 추가 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
테이블을 생성할 때 문자열 ID를 사용하세요
create_table :users, id: :string do |t| t.string :nameend
활성 레코드 모델에 CoolId::Model
문제를 포함하고 접두사를 설정합니다.
클래스 사용자 < ActiveRecord::Base include CoolId::Model Cool_id 접두사: "usr"end
참고: bigints 또는 uuid와 같은 보다 전통적인 기본 키를 선호하는 경우 다른 열에서 id_field
사용할 수 있습니다.
당신은 쿨에이드를 마셨습니다. 새로 생성된 모든 마이그레이션에서 문자열 ID를 사용하도록 레일을 설정합니다.
# config/initializers/generators.rbRails.application.config.generators do |g| g.orm :active_record, 기본_키_유형: :stringend
그런 다음 멋진 ID를 포함하도록 ApplicationRecord
설정하고 이를 상속받는 클래스에 설정되어 있는지 확인하세요.
# app/models/application_record.rbclass ApplicationRecord < ActiveRecord::Base include CoolId::Model Primary_abstract_class Apply_cool_id_for_descendantsend
graphql Ruby node 인터페이스를 사용하면 객체 식별을 구현할 수 있습니다.
# 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