Я использую Rails 3.0.20 и рубин 1.8.7 (2011-06-30) 352 номера патчейМне нужно создать uuid для моего приложения rails. Какие у меня варианты (драгоценные камни)?
Пожалуйста, предложите мне лучший плагин для создания справ.
Я использую Rails 3.0.20 и рубин 1.8.7 (2011-06-30) 352 номера патчейМне нужно создать uuid для моего приложения rails. Какие у меня варианты (драгоценные камни)?
Пожалуйста, предложите мне лучший плагин для создания справ.
Есть много вариантов, я рекомендую не добавлять дополнительные зависимости и использовать SecureRandom
что встроенная:
SecureRandom.uuid #=> "1ca71cd6-08c4-4855-9381-2f41aeffe59c"
другие возможные форматы here.
Я бы предложил, чтобы этот комментарий был правильно проверенным. UUID - это универсальный формат для GUID, но что-то действительно идет. –
Я бы предложил перепроверять это как правильный ответ, основанный на том, что это встроенная функция, и она генерирует действительные UUID для PG. –
SecureRandom # uuid, похоже, не находится в Ruby 1.8.7. Похоже, что он был добавлен в 1.9.3: http://apidock.com/ruby/v1_9_3_392/SecureRandom/uuid/class – existentialmutt
Первое, что я хотел бы предложить, - это обновить версию рубинов и рельсов.
Очень хороший способ генерации guid - SecureRandom, который является рубиновым модулем. С легким использованием.
require 'securerandom'
guid = SecureRandom.hex(10) #or whatever value you want instead of 10
'require 'securerandom'' больше не требуется при использовании Rails 3.1 или выше. –
UUID имеет RFC! Это нарушит любую проверку UUID (как в PostgreSQL) – kixorz
Пожалуйста, смотрите в деталях, как использовать SecureRandom рубиновый стандартную библиотеку использовать UUID с примером в рельсах 3.X и 4.X
создать usesguid.rb файл в LIB/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
добавить следующую строку в конфигурационный/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
Это поможет вам настроить UUID для вашего приложения rails.
Это может быть полезно для Rails 3.0, 3.1, 3.2 и 4.0.
Пожалуйста, дайте мне знать Если у вас возникли проблемы при использовании, это так просто!
Другие варианты Rails4 here
Моя причина использовать это в Rails 4, на самом деле я хотел использовать более раннюю версию postgreSQL. Если у вас нет такой зависимости, вы можете использовать встроенную функцию. –
Я предложил бы использовать PostgreSQL и использовать UUID столбец, построенный в это autogenerates UUID в зависимости от типа создаваемого столбца.
Пример в Rails 3 миграции
execute <<-SQL CREATE TABLE some_items (id uuid PRIMARY KEY DEFAULT uuid_generate_v1()); SQL
Может быть лучший способ сделать это в Rails 4.
Мне нравится этот подход; можете ли вы добавить более подробную информацию? – therealrootuser
Нет упоминания об использовании PG в вопросе. Рекомендовать новую систему баз данных не очень помогает ... – Ger
http://stackoverflow.com/questions/6021372/best-way-to -create-unique-token-in-rails – Muntasim
Виртуальный, невозможно установить неверный ответ, и это сомнительно. Но я настоятельно рекомендую вам взглянуть на ответ @ apneadiving.Imho, это правильный ответ, и многие люди пропустят его, потому что он находится внизу страницы. –