2009-09-02 6 views
8

Datamapperでは、2つのフィールドの組み合わせを一意にする方法を指定します。たとえば、カテゴリはドメイン内で一意の名前を持つ必要があります。datamapper複数フィールド一意索引

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

    belongs_to :domain 
end 
+0

どこかで、名前付きキーがこのようにグループ化されていることがわかりました。すなわち:unique_index =>:名前とドメインの両方の名前。 –

答えて

1

両方のプロパティをキーとして定義しようとしましたか?私はそれを試したことは確かではありませんが、それは複合キーになるはずです。次の2つのプロパティの一意のインデックスを作成する必要が

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

実際には既にキーがあります。コードスニペットにはキーを入れませんでした。 –

16

class Category 
    include DataMapper::Resource 

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

    belongs_to :domain 
end 
+0

名前とドメインの両方がテーブル全体で一意である必要があるため、これは間違っています。私が尋ねたのは、セット(:name、:domain)をユニークにする方法でした。 –

+0

:unique_index =>:named_uは私が必要とするものを正確に行いました!ありがとう! –

+0

実際、 ':u'シンボルはもっと明確になりました - 例えば':index_on_name_and_domain_id' - 実際には正しいです。 DataMapperプロパティドキュメントページのインデックス:http://rubydoc.info/github/datamapper/dm-core/master/DataMapper/Propertyを参照してください。ステートメントは、複数列複合ユニーク索引を作成します。 –

2

実際、ジョン、Joschiの答えは正しいです:という名前の使用:unique_index値は、複数列のインデックスを作成し、これらのハッシュロケットの右側を読むことが重要です(つまり、ちょうどtrueだった場合は正しいでしょう)。

+0

私はDataMapperから離れてしまったので、これは変更されているかもしれませんが、コメントを書いた時点では正しいです。 –

関連する問題