在Rails中使用uuidtools生成一个短UUID字符串



我必须生成一个唯一的和随机字符串,这是存储在数据库中。为此,我使用了"uidtools"gem。然后在我的控制器中添加以下行:

require "uuidtools"

然后在我的控制器创建方法中,我声明了一个'temp'变量,并生成一个唯一的随机'uuid'字符串,如下所示:

temp=UUIDTools::UUID.random_create

创建一个像这样的字符串:

f58b1019-77b0-4d44-a389-b402bb3e6d50

现在我的问题是我必须使它短,最好在8-10个字符。现在我该怎么做呢?是否有可能传递任何参数,使其成为一个理想的长度字符串??

Thanks in Advance…

您不需要uidtools。你可以使用Secure Random。

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

45传递给hex将分别生成8和10个字符的十六进制字符串。

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

请详细了解,我是如何在我最近的一个项目中使用安全的,一定会帮助你!

创建usesguid。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

在配置/应用程序中添加以下行。加载文件-

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也很有用。

请让我知道,如果你有任何问题,而使用它,这么简单!

相关内容

  • 没有找到相关文章

最新更新