我用 Rails 3.0.20和 ruby 1.8.7(2011-06-30 patchlevel 352)
请建议我生成guid的最佳插件。
答案 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