2011-01-19 11 views
5

que tienen una base de datos que utiliza UUID como claves primarias, así:Rieles: ¿puedo usar referencias polimórficas con claves primarias no enteras?

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

Sin embargo, cuando trato de usar: las referencias de claves ajenas a esa mesa, que genera las columnas enteras para el ID. ¿Pueden las referencias ser instruidas para tratar con una ID no entera? Mi migración para el cuadro que hace referencia es la siguiente:

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

Sé que solo podía crear manualmente :my_table_id y :my_table_type columnas, pero me pregunto si :references se pueden hacer para hacer su magia en estas circunstancias, por lo que yo no tengo que manejar el tipo de identificación + explícitamente en mi código.

Respuesta

3

No, references solo crea columnas enteras a partir de este escrito.

Estoy seguro de que podría anular el método references para hacer lo que quiera. Pero IMO será mejor que especifique sus columnas UUID y escriba columnas explícitamente. De esa manera, el código es claro sobre lo que está sucediendo detrás de escena.

+0

Sí, he acabo de comprobar el origen y activerecord está codificado para que el ID sea un número entero. – kdt

15

A: Tipo de opción se ha añadido al hacer referencia a los carriles ya 4,2

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

Por ejemplo:

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 

fuente: https://github.com/rails/rails/pull/16231

Cuestiones relacionadas