2009-09-02 15 views
8

W Datamapper, jak by określić, że połączenie dwóch pól musi być unikalne. Na przykład kategorie muszą mieć unikalne nazwy w domenie:datamapper unikalny indeks wielu pól

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

    belongs_to :domain 
end 
+0

Gdzieś, o czym wspomniałem wspomniałem, że nazwane klucze będą się tak grupować. ie: unique_index =>: nazwa dla nazwy i domeny. –

Odpowiedz

1

Czy próbowałeś zdefiniować obie właściwości jako klucze? Nie jestem pewien, czy próbowałem, ale w ten sposób powinny stać się kluczem złożonym.

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

Właściwie istnieje już klucz, po prostu nie uwzględniłem go w fragmencie kodu. –

16

Trzeba stworzyć indeks unikalny dla dwóch właściwości:

class Category 
    include DataMapper::Resource 

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

    belongs_to :domain 
end 
+0

Jest to niepoprawne, ponieważ będzie wymagać, aby zarówno nazwa, jak i domena były unikalne w całej tabeli. To, o co pytałem, to jak ustawić unikalny zestaw (: nazwa,: domena). –

+0

: unique_index =>: named_u zrobił dokładnie to, czego potrzebowałem! Dzięki! –

+0

Rzeczywiście, chociaż symbol ': u' mógł być wyraźniejszy - na przykład': index_nazwa_i_nazwa_domeny' - rzeczywiście jest poprawny. Zobacz sekcję Indeksy na stronie dokumentacji właściwości DataMapper: http://rubydoc.info/github/datamapper/dm-core/master/DataMapper/Property. Instrukcje tworzą wielobolumnowy, unikalny indeks złożony z wielu kolumn. –

2

Właściwie, John odpowiedź Joschi jest poprawna: Stosowanie nazwanych: wartości unique_index powoduje utworzenia indeksu wielu kolumn; ważne jest, aby przeczytać prawą stronę tych rakiet-haszysz (to znaczy, gdyby był to właśnie true, miałbyś rację).

+0

Odsunąłem się od DataMapper, więc mogło się to zmienić, ale w momencie, w którym napisałem komentarz, było to poprawne. –

Powiązane problemy