Подтвердить что ты не робот

Создание короткой строки UUID с использованием uuidtools In Rails

Мне нужно создать уникальную и случайную строку, которая должна храниться в базе данных. Для этого я использовал драгоценный камень "uuidtools". Затем в моем контроллере я добавил следующую строку:

require "uuidtools"

а затем в моем контроллере создайте метод. Я объявил переменную "temp" и создал уникальную и случайную строку "uuid" следующим образом:

temp=UUIDTools::UUID.random_create

который создает строку, подобную этой:

f58b1019-77b0-4d44-a389-b402bb3e6d50

Теперь моя проблема в том, что я должен сделать ее коротким, желательно в пределах 8-10 символов. Теперь, как мне это сделать? Можно ли передать любой аргумент, чтобы сделать его желательной длиной?

Спасибо в Advance...

4b9b3361

Ответ 1

Для этого вам не нужны 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 символов шестнадцатеричных строк соответственно.

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

Ответ 2

Пожалуйста, смотрите подробно, как недавно я использовал securerandom в одном из моих проектов, определенно вам поможет!

создайте файл useguid.rb в файле lib/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'

Создайте миграцию script для функции 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

Это поможет вам настроить UUID для вашего приложения rails.

Это может быть полезно для Rails 3.0, 3.1, 3.2 и 4.0.

Пожалуйста, дайте мне знать Если у вас есть какие-то проблемы при использовании, так просто!