2009-09-02 15 views
8

Datamapper'da, iki alanın kombinasyonunun benzersiz olması nasıl belirtilir? örnek kategoriler için, etki alanında benzersiz adlara sahip olmalıdır:datamapper çok alanlı benzersiz dizin

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

    belongs_to :domain 
end 
+0

Gördüğüm bir yerlerde, adlandırılmış anahtarların bu şekilde gruplanacağından bahsetmiştim. ie: unique_index =>: hem isim hem de alan adı. –

cevap

1

sen anahtarları olarak her iki özelliklerini tanımlamak için denemek mü? Denediğime emin değilim ama bu şekilde bileşik bir anahtar olmalılar.

class Category 
    include DataMapper::Resource 

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

    belongs_to :domain 
end 
+0

Aslında bir anahtar zaten var, kod snippet'ini buna eklemedim. –

16

Sen iki özellik için benzersiz bir dizin oluşturmak zorunda birden çok sütunlu bir dizin oluşturmak gelmez unique_index değerler; Bu karma-roketlerin sağ tarafını okumak önemlidir (yani, eğer true olmuşsa, haklısınız demektir).

+0

Bu, hem adın hem de etki alanının tablo genelinde benzersiz olmasını gerektireceğinden hatalı. Ne istediğim set (: name,: domain) benzersiz nasıl yapılır. –

+0

: unique_index =>: named_u tam ihtiyacım olanı yaptı! Teşekkürler! –

+0

Gerçekten de:: u 'simgesi daha açık olabilirdi - örneğin:: index_on_name_and_domain_id' - aslında doğru. DataMapper özellik belgeleri sayfasındaki Endeksler bölümüne bakın: http://rubydoc.info/github/datamapper/dm-core/master/DataMapper/Property. İfadeler, çoklu sütun bileşik benzersiz bir dizin oluşturur. –

2

Aslında, John Joschi cevabı doğrudur: adlandırılmış kullanımını:

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

DataMapper'dan uzaklaştım, bu değişmiş olabilir, ancak bu yorumu yazdığımda doğruydu. –

İlgili konular