23

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

require "uuidtools"

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

temp=UUIDTools::UUID.random_create

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

f58b1019-77b0-4d44-a389-b402bb3e6d50

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

提前致谢...

4

2 回答 2

51

为此,您不需要 uuidtools。您可以为此使用安全随机

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

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

[5] pry(main)> SecureRandom.hex(4)
=> "a937ec91"
[6] pry(main)> SecureRandom.hex(5)
=> "98605bb20a"
于 2013-01-07T12:49:12.737 回答
3

请详细查看,我最近如何在我的一个项目中使用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 也很有用。

如果您在使用时遇到任何问题,请告诉我,很简单!

于 2013-10-22T11:18:29.990 回答