2009-09-02 16 views
8

In Datamapper, come si specifica la combinazione di due campi deve essere univoco. Per esempio le categorie devono avere nomi univoci all'interno di un dominio:indice univoco multi-campo del datamapper

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

    belongs_to :domain 
end 
+0

Da qualche parte ho visto che le chiavi nominate si raggruppano in questo modo. es .: unique_index =>: nome per nome e dominio. –

risposta

1

Hai provato a definire entrambe le proprietà come chiavi? Non sono sicuro di averlo provato, ma in quel modo dovrebbero diventare una chiave composita.

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

In realtà c'è già una chiave, non l'ho inclusa nello snippet di codice. –

16

È necessario creare un indice univoco per le due proprietà:

class Category 
    include DataMapper::Resource 

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

    belongs_to :domain 
end 
+0

Non è corretto in quanto richiede che sia il nome che il dominio siano univoci nella tabella. Quello che ho chiesto è stato come rendere unico il set (: name,: domain). –

+0

: unique_index =>: named_u ha fatto esattamente ciò di cui avevo bisogno! Grazie! –

+0

Infatti, anche se il simbolo ': u' avrebbe potuto essere più chiaro - per esempio': index_on_name_and_domain_id' - in realtà è corretto. Vedere la sezione Indici nella pagina di documentazione delle proprietà DataMapper: http://rubydoc.info/github/datamapper/dm-core/master/DataMapper/Property. Le istruzioni creano un indice univoco composito a più colonne. –

2

In realtà, Giovanni, la risposta di Joschi è corretta: l'uso di nome: valori unique_index non creare un indice a più colonne; è importante leggere il lato destro di questi hash-rocket (cioè, se fosse appena stato true, avresti ragione).

+0

Mi sono allontanato da DataMapper quindi potrebbe essere cambiato, ma al momento in cui ho scritto il commento, era corretto. –

Problemi correlati