2009-09-02 60 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

我看到的某处提到,指定的按键会像这样分组。即:unique_index =>:名称和域名。 – 2009-09-03 18:52:15

回答

1

您是否尝试将两个属性都定义为键?不知道我已经尝试过,但这样他们应该成为一个复合关键。

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

其实已经有一个关键,我只是没有包含在代码片段中。 – 2009-09-03 18:50:54

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)独一无二。 – 2010-03-24 00:06:59

+0

:unique_index =>:named_u正是我所需要的!谢谢! – 2012-08-30 14:25:49

+0

事实上,尽管':u'符号可能更清晰 - 例如':index_on_name_and_domain_id' - 它确实是正确的。请参阅DataMapper属性文档页面上的索引部分:http://rubydoc.info/github/datamapper/dm-core/master/DataMapper/Property。这些语句创建一个多列组合唯一索引。 – 2013-02-18 20:06:46

2

其实,约翰,Joschi的答案是正确的:使用命名的:unique_index值并创建一个多列索引;阅读这些散列火箭的右侧是非常重要的(即,如果它刚好是true,那么你会是对的)。

+0

我已经离开DataMapper,所以这可能已经改变了,但是在我写评论的时候,这是正确的。 – 2012-04-13 04:58:02