web-dev-qa-db-ja.com

uuidtools In Rails)を使用して短いUUID文字列を生成する

データベースに保存される一意のランダムな文字列を生成する必要があります。これを行うために、私は「uuidtools」宝石を使用しました。次に、コントローラーに次の行を追加しました。

require "uuidtools"

次に、コントローラーのcreateメソッドで、「temp」変数を宣言し、次のような一意のランダムな「uuid」文字列を生成しました。

temp=UUIDTools::UUID.random_create

これは次のような文字列を作成しています:

f58b1019-77b0-4d44-a389-b402bb3e6d50

今の私の問題は、短く、できれば8〜10文字以内にする必要があることです。どうすればいいですか?引数を渡して、望ましい長さの文字列にすることは可能ですか?

前もって感謝します...

16
Siddharth

これにはuuidtoolsは必要ありません。これには Secure Random を使用できます。

[1] pry(main)> require "securerandom"
=> true
[2] pry(main)> SecureRandom.hex(20)
=> "82db4d707c4c5db3ebfc349da09c991b7ca0faa1"
[3] pry(main)> SecureRandom.base64(20)
=> "CECjUqNvPBaq0o4OuPy8RvsEoCY="

合格4および5からhexは、それぞれ8文字と10文字の16進文字列を生成します。

[5] pry(main)> SecureRandom.hex(4)
=> "a937ec91"
[6] pry(main)> SecureRandom.hex(5)
=> "98605bb20a"
40
Dogbert

最近、私のプロジェクトの1つでsecurerandomをどのように使用したかを詳しく見てください。間違いなく役に立ちます!

lib/usesguid.rbにusesguid.rbファイルを作成し、その中に以下のコードを貼り付けます-

require 'securerandom'

module ActiveRecord
  module Usesguid #:nodoc:
    def self.append_features(base)
      super
      base.extend(ClassMethods)  
    end

    module ClassMethods
      def usesguid(options = {})
        class_eval do
          self.primary_key = options[:column] if options[:column]
          after_initialize :create_id
          def create_id
            self.id ||= SecureRandom.uuid
          end
        end
      end
    end
  end
end
ActiveRecord::Base.class_eval do
  include ActiveRecord::Usesguid
end

config/application.rbに次の行を追加して、ファイルをロードします-

require File.dirname(__FILE__) + '/../lib/usesguid'

以下に説明するように、UUID関数の移行スクリプトを作成します-

class CreateUuidFunction < ActiveRecord::Migration
  def self.up
    execute "create or replace function uuid() returns uuid as 'uuid-ossp', 'uuid_generate_v1' volatile strict language C;"
  end

  def self.down
    execute "drop function uuid();"
  end
end

連絡先の移行の例とその使用方法を次に示します-

class CreateContacts < ActiveRecord::Migration
  def change
    create_table :contacts, id: false do |t|
      t.column :id, :uuid, null:false 
      t.string :name
      t.string :mobile_no

      t.timestamps
    end
  end
end

モデルに使用する最終的な方法

class Contact < ActiveRecord::Base
  usesguid

end

これは、RailsアプリケーションのUUIDを構成するのに役立ちます。

これは、Rails 3.0、3.1、3.2、および4.0でも役立ちます。

使用中に問題が発生した場合は、簡単にお知らせください。

3