Generating a short UUID string using uuidtools In Rails

后端 未结 2 2044
忘了有多久
忘了有多久 2020-12-30 02:06

I have to generate a unique and random string which is to be stored in database. For doing this I have used the \"uuidtools\" gem. Then in my controller I have added the fol

相关标签:
2条回答
  • 2020-12-30 02:23

    Please see in detail, How I used securerandom in one of my project recently, definitely help you!

    create usesguid.rb file in your lib/usesguid.rb and paste below code in that -

    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
    

    add following line in your config/application.rb to load file -

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

    Create migration script for UUID function as mentioned below to -

    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
    

    Here is example for contact migration, how we can use it -

    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
    

    Final how to use into your model

    class Contact < ActiveRecord::Base
      usesguid
    
    end
    

    This will help you to configure UUID for your rails application.

    This can be useful for Rails 3.0, 3.1, 3.2 and 4.0 as well.

    Please let me know If you have any issue while using it, so simple!

    0 讨论(0)
  • 2020-12-30 02:47

    You don't need uuidtools for this. You can use Secure Random for this.

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

    Passing 4 and 5 to hex will generate 8 and 10 character hex strings respectively.

    [5] pry(main)> SecureRandom.hex(4)
    => "a937ec91"
    [6] pry(main)> SecureRandom.hex(5)
    => "98605bb20a"
    
    0 讨论(0)
提交回复
热议问题