2011-01-19 20 views
5

Tôi có một cơ sở dữ liệu có sử dụng UUIDs như khóa chính, như thế này:Đường ray: tôi có thể sử dụng các tham chiếu đa hình với các khóa chính không phải là số nguyên không?

create_table "my_table", :id => false, :force => true do |t| 
t.string "id", :limit => 36 
end 

Tuy nhiên, khi tôi cố gắng sử dụng: tài liệu tham khảo cho các phím nước ngoài vào bảng đó, nó tạo ra các cột số nguyên cho ID. Có thể: các tham chiếu được hướng dẫn để xử lý một ID không phải là số nguyên không? di cư của tôi cho bảng đề cập là như thế này:

create_table "child_table" :id => false, :force => true do |t| 
t.string "id", :limit => 36 
t.references :my_table 
end 

tôi biết rằng tôi chỉ có thể tự tạo :my_table_id:my_table_type cột, nhưng tôi đang tự hỏi liệu :references có thể được thực hiện để làm phép thuật của mình trong những trường hợp như vậy mà tôi không phải xử lý id + loại một cách rõ ràng trong suốt mã của tôi.

Trả lời

3

Không, references chỉ tạo cột số nguyên theo văn bản này.

Tôi chắc chắn bạn có thể ghi đè phương thức references để thực hiện những gì bạn muốn. Nhưng IMO bạn nên cải thiện việc chỉ định các cột UUID và cột loại một cách rõ ràng. Bằng cách đó, mã rõ ràng về những gì đang diễn ra đằng sau hậu trường.

+0

Yep, tôi đã kiểm tra chỉ nguồn activerecord và nó được hardcoded cho ID là một số nguyên. – kdt

15

A: loại tùy chọn đã được thêm vào khi tham khảo từ Rails 4,2

t.references :car, type: :uuid, index: true 

Ví dụ:

def change 
    enable_extension 'uuid-ossp' 
    create_table :cars, id: :uuid do |t| 
    t.integer :seats 
    # And other car-specific things 
    end 
    create_table :wheels do |t| 
    t.references :car, type: :uuid, index: true 
    t.integer :radius 
    # And other wheel-specific things 
    end 
end 

nguồn: https://github.com/rails/rails/pull/16231

Các vấn đề liên quan