2009-09-02 6 views
8

Datamapper에서 두 필드의 조합을 고유하게 지정하는 방법은 무엇입니까? 예를 들어 카테고리는 도메인 내에서 고유 한 이름을 가져야합니다.datamapper 다중 필드 고유 인덱스

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

    belongs_to :domain 
end 
+0

어딘가에서 이름이 지정된 키가 이처럼 그룹화됩니다. ie : unique_index => : 이름과 도메인의 이름. –

답변

1

두 속성을 키로 정의하려고 했습니까? 내가 그것을 시도했는지 확신 할 수 없지만 그런 식으로 복합 키가되어야한다.

class Category 
    include DataMapper::Resource 

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

    belongs_to :domain 
end 
+0

사실 이미 키가 있습니다. 코드 스 니펫에 키를 포함하지 않았습니다. –

16

당신은 두 가지 속성에 대한 고유 인덱스를 만들 필요가 다중 컬럼 인덱스를 만들 않습니다 unique_index 값을; 그 해시 - 로켓의 오른쪽을 읽는 것이 중요합니다 (즉, 그것이 단지 true이라면, 맞을 것입니다).

+0

이름과 도메인이 모두 테이블에서 고유해야하므로 올바르지 않습니다. 내가 물어 본 것은 set (: 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의 대답이 올바른지 : 이름의 사용 :

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

DataMapper에서 벗어 났으므로 변경되었을 수 있습니다.하지만 주석을 작성한 시점에서는 정확합니다. –