我使用 Rails 3.0.20 和 ruby 1.8.7 (2011-06-30 patchlevel 352)
请建议我最好的插件来生成 guid。
我使用 Rails 3.0.20 和 ruby 1.8.7 (2011-06-30 patchlevel 352)
请建议我最好的插件来生成 guid。
有很多选项,我建议不要添加额外的依赖项并使用SecureRandom
内置的:
SecureRandom.uuid #=> "1ca71cd6-08c4-4855-9381-2f41aeffe59c"
在此处查看其他可能的格式。
我建议的第一件事是请升级您的 ruby 和 rails 版本。
生成 guid 的一个非常好的方法是SecureRandom,它是一个 ruby 模块。使用方便。
require 'securerandom'
guid = SecureRandom.hex(10) #or whatever value you want instead of 10
我建议使用 PostgreSQL 并使用内置的 uuid 列,它会根据您创建列的类型自动生成 UUID。
Rails 3 迁移中的示例
execute <<-SQL
CREATE TABLE some_items (id uuid PRIMARY KEY DEFAULT uuid_generate_v1());
SQL
在 Rails 4 中可能是更好的方法。
请详细查看如何使用securerandom ruby标准库来使用UUID,例如rails 3.X和4.X
在您的 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 的其他选项在这里