2013-08-14 13 views
56

Io uso Rails 3.0.20 e rubino 1.8.7 (2011-06-30 patchlevel 352)Ho bisogno di generare uuid per la mia applicazione di rotaie. Quali sono le opzioni (gemme) che ho?

Si prega di suggerire me il miglior plugin per generare GUID.

+0

http://stackoverflow.com/questions/6021372/best-way-to -create-unique-token-in-rails – Muntasim

+0

Virtuale, non c'è modo di segnalare una risposta errata e la nozione di ciò è discutibile. Ma ti consiglio caldamente di dare un'occhiata alla risposta di @ apneadiving.Imho, questa è la risposta corretta e un sacco di persone mancherà perché è in fondo alla pagina. –

risposta

179

ci sono un sacco di opzioni, vi consiglio di non aggiungere ulteriori dipendenze e l'uso SecureRandom che è incorporato:

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

Vedi altri formati possibili here.

+0

Suggerirei che questo commento sia la risposta corretta. UUID è un formato universale per GUID, ma qualsiasi cosa vada davvero. –

+1

Suggerirei di ricontrollare questo come la risposta corretta in base al fatto che si tratta di una funzione incorporata e genera UUID validi per PG. –

+1

SecureRandom # uuid non sembra essere in Ruby 1.8.7. Sembra che sia stato aggiunto in 1.9.3: http://apidock.com/ruby/v1_9_3_392/SecureRandom/uuid/class – existentialmutt

10

La prima cosa che suggerirei è che per favore aggiorna la tua versione di ruby ​​e rails.

Un ottimo modo per generare guida è SecureRandom, che è un modulo rubino. Con un facile utilizzo.

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

'require 'securerandom'' non è più necessario se si utilizza Rails 3.1 o versioni successive. –

+0

UUID ha RFC! Questo interromperà qualsiasi convalida UUID (come in PostgreSQL) – kixorz

3

Si prega di vedere nel dettaglio, come utilizzare SecureRandom rubino libreria standard da utilizzare UUID con l'esempio di rotaie 3.xe 4.x

creare il file usesguid.rb nella lib/usesguid.rb e incollare sotto il codice in quel -

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 

aggiuntivo seguente riga nel vostro config/application.rb caricare il file -

require File.dirname(__FILE__) + '/../lib/usesguid' 

Creare script di migrazione per la funzione UUID come indicato di seguito per -

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 

Ecco ad esempio per la migrazione dei contatti, come possiamo usarlo -

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 

finale come utilizzare nel modello

class Contact < ActiveRecord::Base 
    usesguid 

end 

Questo ti aiuterà a configurare UUID per la tua applicazione di binari.

Questo può essere utile anche per Rails 3.0, 3.1, 3.2 e 4.0.

Per favore fatemi sapere se avete qualche problema durante l'utilizzo, così semplice!

Altre opzioni per Rails4 here

+0

Il motivo per cui lo uso in Rails 4, In realtà volevo usare la versione precedente di postgreSQL. Se non si dispone di tale dipendenza, è possibile utilizzare la funzione integrata. –

3

Io suggerirei di usare PostgreSQL e utilizzando la colonna UUID integrato, esso genera automaticamente UUID in base al tipo di creare la colonna.

Esempio in Rails 3 migrazione

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

Potrebbe essere un modo migliore per fare questo in rotaie 4.

+1

Mi piace questo approccio; potresti aggiungere ulteriori dettagli? – therealrootuser

+3

Non si fa menzione dell'uso di PG nella domanda. Raccomandare un nuovo sistema di database non è di grande aiuto ... – Ger

Problemi correlati