Rails アプリ用の gem は、プレフィックスの後に nanoid が続く文字列 ID を生成します。ストライプの API に表示される ID に似ています。 Rails の globalid と同様に、ID でレコードを検索することもできます。これを作成した理由を説明する紹介ブログ投稿があります。
class User < ActiveRecord::Base include CoolId::Model Cool_id prefix: "usr"endUser.create!(name: "...").id# => "usr_vktd1b5v84lr"
CoolId.locate("usr_vktd1b5v84lr")# => #<ユーザー ID: "usr_vktd1b5v84lr"、名前: "John Doe">
例: バッチ挿入または更新/挿入の場合
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!(name: "...").id# => "cus_UHNYBINU"
これらはグローバルに設定できます
CoolId.configure は |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 をより簡単に採用できるようになります。
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
テーブルの作成時に文字列 ID を使用する
create_table :users、id: :string は |t| を実行します。 t.string :nameend
CoolId::Model
懸念をアクティブなレコード モデルに含めてプレフィックスを設定します
class User < ActiveRecord::Base include CoolId::Model Cool_id prefix: "usr"end
注: より伝統的な主キー (bigint や uuid など) を好む場合は、別の列でid_field
を使用できます。
あなたは冷却剤を飲みました。新しく生成されたすべての移行で文字列 ID を使用するようにレールをセットアップします
# config/initializers/generators.rbRails.application.config.generators は |g| を実行します。 g.orm :active_record、primary_key_type: :stringend
次に、クール ID を含めるようにApplicationRecord
セットアップし、それを継承するクラスでセットアップされていることを確認します。
# app/models/application_record.rbclass ApplicationRecord < ActiveRecord::Base include CoolId::Model Primary_abstract_class enforce_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