2010-11-20 16 views
5

Me gustaría poder usar una identificación personalizada (en lugar de las automáticas de incremento automático) para un modelo de Rails. Básicamente, todas las identificaciones serán identificadores de la tienda iTunes, que son enteros largos. ¿Es posible desactivar los identificadores de autoaumento automático predeterminados y exigir que se establezca uno? Estos identificadores también se usarán como claves foráneas en otros modelos.Posible columna de "Id" de ActiveRecord no autoincrementada posible?

Respuesta

6

Algo como esto:

create_table :blah, {:id => false} do |t| 
    t.int :my_custom_int_id 
end 
execute "ALTER TABLE blah ADD PRIMARY KEY (my_custom_int_id);" 
+0

Esto se parece a lo que estaba buscando, gracias. – markquezada

+1

También necesitará agregar 'set_primary_key: my_custom_int_id' (Rails 3) o' self.primary_key =: my_custom_int_id' (Rails 4) en su modelo. – gregoltsov

2

Es posible ajustar manualmente la ID antes de guardar el modelo.

a = Model.new 
a.id = 8888 #from itunes 
a.save 

Sin embargo, se debe considerar un campo separado llamado itunes_id en lugar de este enfoque.

+0

Actualmente estoy usando un campo 'itunes_id' separado como usted describe. El problema es que la API que estoy usando devuelve ID de iTunes, por lo que es complicado realizar una búsqueda adicional de itunes_id -> mi ID de modelo todo el tiempo. – markquezada

+1

Me gusta mucho cómo dijiste lo que debería hacer, pero también me ofreció tu consejo ... las mejores prácticas ... :) – baash05

+0

@daveatflow Esa es la opinión personal, no la mejor práctica de la OMI. –

Cuestiones relacionadas