我需要为我的 Rails 应用程序生成 uuid。我有哪些选项(gem) ?

我吸毒 Rails 3.0.20和 Ruby 1.8.7(2011-06-30补丁级别352)

请给我推荐最好的插件来生成 guid。

84149 次浏览

There are plenty of options, I recommend not to add additional dependencies and use SecureRandom which is builtin:

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

See other possible formats here.

The first thing I would suggest is to please upgrade your ruby and rails versions.

A very good way of generating guids is SecureRandom, which is a ruby module with easy usage.

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

Please see in detail, how to use securerandom ruby standard library to use UUID with example in rails 3.X and 4.X

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!

Other options for Rails4 here

I would suggest using PostgreSQL and using the uuid column built in, it autogenerates UUID based on type you create the column.

Example in Rails 3 migration

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

Might be a better way to do this in Rails 4.