我需要为我的rails应用程序生成uuid。我有哪些选择(宝石)?

时间:2013-08-14 09:44:25

标签: ruby-on-rails ruby ruby-on-rails-3 guid uuid

我用 Rails 3.0.20和 ruby 1.8.7(2011-06-30 patchlevel 352)

请建议我生成guid的最佳插件。

4 个答案:

答案 0 :(得分:226)

有很多选项,我建议不要添加其他依赖项并使用内置的SecureRandom

SecureRandom.uuid #=> "1ca71cd6-08c4-4855-9381-2f41aeffe59c"

请参阅其他可能的格式here

答案 1 :(得分:11)

我建议的第一件事是请升级你的ruby和rails版本。

生成guid的一种非常好的方法是SecureRandom,这是一个ruby模块。易于使用。

require 'securerandom'
guid = SecureRandom.hex(10) #or whatever value you want instead of 10

答案 2 :(得分:3)

我建议使用PostgreSQL并使用内置的uuid列,它会根据您创建列的类型自动生成UUID。

Rails 3迁移中的示例

execute <<-SQL CREATE TABLE some_items (id uuid PRIMARY KEY DEFAULT uuid_generate_v1()); SQL

可能是在Rails 4中更好的方法。

答案 3 :(得分:2)

请详细了解如何使用securerandom ruby​​标准库在rails 3.X和4.X中使用UUID示例

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

请告诉我如果您在使用过程中遇到任何问题,那么简单!

Rails4的其他选项here