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.
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.
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.
Suggerirei che questo commento sia la risposta corretta. UUID è un formato universale per GUID, ma qualsiasi cosa vada davvero. –
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. –
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
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
'require 'securerandom'' non è più necessario se si utilizza Rails 3.1 o versioni successive. –
UUID ha RFC! Questo interromperà qualsiasi convalida UUID (come in PostgreSQL) – kixorz
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
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. –
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.
Mi piace questo approccio; potresti aggiungere ulteriori dettagli? – therealrootuser
Non si fa menzione dell'uso di PG nella domanda. Raccomandare un nuovo sistema di database non è di grande aiuto ... – Ger
http://stackoverflow.com/questions/6021372/best-way-to -create-unique-token-in-rails – Muntasim
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. –