【问题标题】:I need to generate uuid for my rails application. What are the options(gems) I have? [duplicate]我需要为我的 rails 应用程序生成 uuid。我有哪些选择(宝石)? [复制]
【发布时间】:2013-08-16 04:54:20
【问题描述】:

我用 Rails 3.0.20 和 ruby 1.8.7 (2011-06-30 补丁级别 352)

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

【问题讨论】:

  • 虚拟的,没有办法标记一个不正确的答案,而且这个概念是有问题的。但我强烈建议你看看@apneadiving 的回答。恕我直言,这是正确的答案,很多人会错过它,因为它位于页面底部。

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


【解决方案1】:

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

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

查看其他可能的格式here

【讨论】:

  • 我建议这个评论是正确检查的答案。 UUID 是一种通用的 GUID 格式,但一切皆有可能。
  • 我建议重新检查它作为正确答案,因为它是一个内置功能并且它会为 PG 生成有效的 UUID。
  • SecureRandom#uuid 似乎不在 Ruby 1.8.7 中。好像是在 1.9.3 中添加的:apidock.com/ruby/v1_9_3_392/SecureRandom/uuid/class
  • ruby 1.8.x 不应该再使用了
  • 当然可以。然而这个问题特别提到了 1.8.7。
【解决方案2】:

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

生成 guid 的一个非常好的方法是SecureRandom,它是一个 ruby​​ 模块。使用方便。

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

【讨论】:

  • 如果使用 Rails 3.1 或更高版本,则不再需要 require 'securerandom'
  • UUID 有 RFC!这将破坏任何 UUID 验证(如在 PostgreSQL 中)
【解决方案3】:

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

Rails 3 迁移中的示例

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

可能是在 Rails 4 中执行此操作的更好方法。

【讨论】:

  • 我喜欢这种方法;你能补充更多细节吗?
  • 问题中没有提到使用 PG。推荐一个新的数据库系统并没有多大帮助...
  • 执行
【解决方案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 的其他选项here

【讨论】:

  • 我在 Rails 4 中使用它的原因,实际上我想使用早期版本的 postgreSQL。如果您没有这种依赖关系,那么可以使用内置功能。
猜你喜欢
  • 2023-03-17
  • 2014-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-20
  • 2013-11-13
  • 2023-03-28
  • 1970-01-01
相关资源
最近更新 更多