2009-09-02 15 views
8

In Datamapper, wie würde man angeben, die Kombination von zwei Feldern muss eindeutig sein. Beispielsweise müssen Kategorien innerhalb einer Domäne eindeutige Namen haben:Datamapper Multi-Feld eindeutigen Index

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

    belongs_to :domain 
end 
+0

Irgendwo habe ich erwähnt, dass benannte Schlüssel so gruppiert werden. zB: unique_index =>: Name für Name und Domäne. –

Antwort

1

Haben Sie versucht, beide Eigenschaften als Schlüssel zu definieren? Ich bin mir nicht sicher, ob ich es versucht habe, aber so sollten sie zu einem zusammengesetzten Schlüssel werden.

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

Eigentlich gibt es bereits einen Schlüssel, ich habe ihn einfach nicht in das Code-Snippet aufgenommen. –

16

Sie haben einen eindeutigen Index für die beiden Eigenschaften zu schaffen:

class Category 
    include DataMapper::Resource 

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

    belongs_to :domain 
end 
+0

Dies ist falsch, da Name und Domäne in der Tabelle eindeutig sein müssen. Was ich fragte, war, wie man das Set (: name,: domain) einzigartig macht. –

+0

: unique_index =>: named_u hat genau das gemacht, was ich brauchte! Vielen Dank! –

+0

Obwohl das ': u' Symbol könnte klarer gewesen sein - zum Beispiel': index_on_name_and_domain_id' - es ist tatsächlich richtig. Weitere Informationen finden Sie im Abschnitt Indices auf der Seite mit der DataMapper-Eigenschaft: http://rubydoc.info/github/datamapper/dm-core/master/DataMapper/Property. Die Anweisungen erstellen einen mehrspaltigen zusammengesetzten eindeutigen Index. –

2

Eigentlich John, Joschi Antwort ist richtig: die Verwendung von Namen: unique_index Werte einen mehrspaltigen Index nicht erstellen; Es ist wichtig, die rechte Seite dieser Hash-Raketen zu lesen (d. h. wenn es nur true gewesen wäre, hättest du recht).

+0

Ich bin von DataMapper weggezogen, also könnte sich das geändert haben, aber zu der Zeit, als ich den Kommentar schrieb, war es korrekt. –

Verwandte Themen