używam Rails 3.0.20 i rubin 1.8.7 (2011-06-30 patchlevel 352)Potrzebuję wygenerować uuid dla mojej aplikacji rails. Jakie są dostępne opcje (klejnoty)?
Proszę zasugerować mi najlepszy plugin do wygenerowania GUID.
używam Rails 3.0.20 i rubin 1.8.7 (2011-06-30 patchlevel 352)Potrzebuję wygenerować uuid dla mojej aplikacji rails. Jakie są dostępne opcje (klejnoty)?
Proszę zasugerować mi najlepszy plugin do wygenerowania GUID.
Istnieje wiele opcji, polecam, aby nie dodawać dodatkowych zależności i używać SecureRandom
która jest wbudowana:
SecureRandom.uuid #=> "1ca71cd6-08c4-4855-9381-2f41aeffe59c"
Zobacz inne możliwe formaty here.
Sugerowałbym, aby ten komentarz był poprawnie sprawdzoną odpowiedzią. UUID to uniwersalny format identyfikatorów GUID, ale wszystko, co naprawdę działa. –
Proponuję ponowne sprawdzenie, czy jest to poprawna odpowiedź na podstawie faktu, że jest to wbudowana funkcja i generuje poprawne identyfikatory UUID dla PG. –
SecureRandom # uuid nie jest w Rubim 1.8.7. Wygląda na to, że został dodany w wersji 1.9.3: http://apidock.com/ruby/v1_9_3_392/SecureRandom/uuid/class – existentialmutt
Pierwszą rzeczą, którą proponuję, jest uaktualnienie wersji ruby i szyn.
Bardzo dobrym sposobem generowania guid jest SecureRandom, który jest modułem ruby. Dzięki łatwemu użyciu.
require 'securerandom'
guid = SecureRandom.hex(10) #or whatever value you want instead of 10
'require 'securerandom'' nie jest już konieczne, jeśli używasz Rails 3.1 lub wyższej. –
UUID ma RFC! Spowoduje to złamanie wszelkich walidacji UUID (jak w PostgreSQL). – kixorz
Proszę zobaczyć w szczegółach, jak używać securerandom ruby biblioteki standardowej do korzystania z UUID przykład w szynach 3.X 4.x
tworzyć usesguid.rb plik w lib/usesguid.rb i wklej poniższy kod, że -
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
Dodaj następujący wiersz w config/environment.rb do załadowania pliku -
require File.dirname(__FILE__) + '/../lib/usesguid'
Utwórz skrypt migracji dla funkcji UUID jak wspomniano poniżej -
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
Oto przykład do migracji kontaktów, jak możemy go używać -
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
końcowy, jak używać do modelu
class Contact < ActiveRecord::Base
usesguid
end
Pomoże to skonfigurować UUID dla aplikacji szyny.
Może to być przydatne także dla Rails 3.0, 3.1, 3.2 i 4.0.
Proszę dać mi znać Jeśli masz jakiekolwiek problemy podczas korzystania, tak proste!
Inne opcje Rails4 here
Mój powód, aby użyć tego w Rails 4, Właściwie chciałem użyć wcześniejszej wersji postgreSQL. Jeśli nie masz takiej zależności, możesz przejść do funkcji wbudowanej. –
Sugerowałbym użyciu PostgreSQL i stosując kolumnę uuid wbudowane, to autogenerates UUID na podstawie typu utworzyć kolumnę.
przykład w szynach 3 migracji
execute <<-SQL CREATE TABLE some_items (id uuid PRIMARY KEY DEFAULT uuid_generate_v1()); SQL
Może być lepszy sposób, to w szyny 4.
Podoba mi się to podejście; czy mógłbyś dodać więcej szczegółów? – therealrootuser
Nie ma żadnej wzmianki o używaniu PG w pytaniu. Polecanie nowego systemu baz danych nie jest zbyt pomocne ... – Ger
http://stackoverflow.com/questions/6021372/best-way-to -utworzenie unikatowego tokena w szynach – Muntasim
Wirtualny nie ma możliwości oznaczenia błędnej odpowiedzi, a pojęcie to jest wątpliwe. Ale zdecydowanie sugeruję, abyś spojrzał na odpowiedź @ apneadiving.Imho, to jest poprawna odpowiedź i wielu ludzi będzie jej brakować, ponieważ znajduje się na dole strony. –