tôi sử dụng Rails 3.0.20 và ruby 1.8.7 (2011/06/30 patchlevel 352)Tôi cần tạo uuid cho ứng dụng đường ray của mình. Các tùy chọn (đá quý) tôi có là gì?
Xin gợi ý cho tôi các plugin tốt nhất để tạo guid.
tôi sử dụng Rails 3.0.20 và ruby 1.8.7 (2011/06/30 patchlevel 352)Tôi cần tạo uuid cho ứng dụng đường ray của mình. Các tùy chọn (đá quý) tôi có là gì?
Xin gợi ý cho tôi các plugin tốt nhất để tạo guid.
Có rất nhiều lựa chọn, tôi khuyên bạn không thêm phụ thuộc bổ sung và sử dụng SecureRandom
đó là dựng sẵn:
SecureRandom.uuid #=> "1ca71cd6-08c4-4855-9381-2f41aeffe59c"
Xem các định dạng khác có thể here.
Tôi sẽ đề xuất nhận xét này là câu trả lời được kiểm tra chính xác. UUID là một định dạng phổ quát cho GUID, nhưng bất cứ điều gì thực sự đi. –
Tôi sẽ đề nghị kiểm tra lại đây là câu trả lời đúng dựa trên thực tế là nó được xây dựng trong tính năng và nó tạo ra UUID hợp lệ cho PG. –
SecureRandom # uuid không xuất hiện trong Ruby 1.8.7. Có vẻ như nó đã được thêm vào trong 1.9.3: http://apidock.com/ruby/v1_9_3_392/SecureRandom/uuid/class – existentialmutt
Điều đầu tiên tôi đề nghị là hãy nâng cấp phiên bản ruby và đường ray của bạn.
Cách tốt nhất để tạo guid là SecureRandom, là mô-đun ruby. Với cách sử dụng dễ dàng.
require 'securerandom'
guid = SecureRandom.hex(10) #or whatever value you want instead of 10
'require 'securerandom'' không còn cần thiết nếu sử dụng Rails 3.1 hoặc cao hơn. –
UUID có RFC! Điều này sẽ phá vỡ bất kỳ xác nhận UUID (như trong PostgreSQL) – kixorz
Xin vui lòng xem chi tiết, làm thế nào để sử dụng thư viện chuẩn SecureRandom ruby để sử dụng UUID với ví dụ trong đường ray 3.x và 4.x
tạo file usesguid.rb trong lib của bạn/usesguid.rb và dán bên dưới mã trong đó -
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
add dòng sau đây vào cấu hình của bạn/application.rb để tải tập tin -
require File.dirname(__FILE__) + '/../lib/usesguid'
Tạo kịch bản chuyển đổi cho chức năng UUID như đã đề cập dưới đây để -
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
Dưới đây là ví dụ cho việc di chuyển tiếp xúc, làm thế nào chúng ta có thể sử dụng nó -
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
cuối cùng làm thế nào để sử dụng vào mô hình của bạn
class Contact < ActiveRecord::Base
usesguid
end
Điều này sẽ giúp bạn định cấu hình UUID cho ứng dụng đường ray của bạn.
Điều này cũng hữu ích cho Rails 3.0, 3.1, 3.2 và 4.0.
Vui lòng cho tôi biết Nếu bạn có bất kỳ vấn đề nào trong khi sử dụng, thật đơn giản!
Các tùy chọn khác cho Rails4 here
Lý do của tôi để sử dụng điều này trong Rails 4, Trên thực tế tôi muốn sử dụng phiên bản trước của postgreSQL. Nếu bạn không có sự phụ thuộc như vậy thì có thể đi cho tính năng dựng sẵn. –
tôi sẽ đề nghị sử dụng PostgreSQL và sử dụng cột uuid xây dựng trong, nó autogenerates UUID dựa trên loại bạn tạo cột.
Ví dụ trong Rails 3 di cư
execute <<-SQL CREATE TABLE some_items (id uuid PRIMARY KEY DEFAULT uuid_generate_v1()); SQL
Có thể là một cách tốt hơn để làm điều này trong Rails 4.
Tôi thích cách tiếp cận này; bạn có thể thêm chi tiết hơn không? – therealrootuser
Không đề cập đến việc sử dụng PG trong câu hỏi. Đề xuất một hệ thống cơ sở dữ liệu mới không giúp được nhiều ... – Ger
http://stackoverflow.com/questions/6021372/best-way-to -create-unique-token-in-rails – Muntasim
Ảo, không có cách nào để gắn cờ một câu trả lời sai và khái niệm đó là vấn đề. Nhưng tôi đề nghị bạn hãy xem câu trả lời của @ apneadiving.Imho, đó là câu trả lời đúng và rất nhiều người sẽ bỏ lỡ nó bởi vì nó ở dưới cùng của trang. –