2009-09-02 12 views
8

En Datamapper, ¿cómo se especificaría que la combinación de dos campos debe ser única? Por ejemplo, las categorías deben tener nombres únicos dentro de un dominio:datamapper multi-field unique index

class Category 
    include DataMapper.resource 
    property :name, String, :index=>true #must be unique for a given domain 

    belongs_to :domain 
end 
+0

En algún lugar que vi mencionó que las claves con nombre se agruparán así. es decir: unique_index =>: nombre para el nombre y el dominio. –

Respuesta

1

¿Intentó definir ambas propiedades como claves? No estoy seguro de haberlo probado, pero de esa manera deberían convertirse en una clave compuesta.

property :name, String, :key => true  
property :category, Integer, :key => true 
+0

En realidad ya hay una clave, simplemente no la incluí en el fragmento de código. –

16

Tienes que crear un índice único para las dos propiedades:

class Category 
    include DataMapper::Resource 

    property :name, String, :unique_index => :u 
    property :domain_id, Integer, :unique_index => :u 

    belongs_to :domain 
end 
+0

Esto es incorrecto, ya que requerirá que tanto el nombre como el dominio sean únicos en la tabla. Lo que pregunté fue cómo hacer que el conjunto (: nombre,: dominio) sea único. –

+0

: unique_index =>: named_u hizo exactamente lo que necesitaba! ¡Gracias! –

+0

De hecho, aunque el símbolo ': u' podría haber sido más claro, por ejemplo': index_on_name_and_domain_id' - en realidad es correcto. Consulte la sección Índices en la página de documentación de propiedades de DataMapper: http://rubydoc.info/github/datamapper/dm-core/master/DataMapper/Property. Las instrucciones crean un índice único compuesto de varias columnas. –

2

En realidad, John, la respuesta de Joschi es correcta: el uso del nombre: valores unique_index no crear un índice de múltiples columnas; es importante leer el lado derecho de esos hash-rockets (es decir, si hubiera sido true, estarías en lo cierto).

+0

Me he alejado de DataMapper, así que esto puede haber cambiado, pero en el momento en que escribí el comentario, era correcto. –

Cuestiones relacionadas