验证DataMapper中组合字段的唯一性

时间:2010-10-28 11:09:52

标签: ruby validation sinatra datamapper

我希望能够在我的数据库中放置条目,其中制造商将被多次代表,但不是制造商和型号的相同组合。 所以“索尼(制造商),电视(型号)”还可以“索尼(制造商),OtherTv(型号)”,但第三个条目“索尼(制造商),电视(型号)”自制造商和型号组合后就不行了不是唯一的。我尝试使用:key => true验证,但它似乎不起作用。而且我猜不到validates_uniqueness_of :manufacturer AND :model这样的事情。那你怎么做的?

class Tvs
  include DataMapper::Resource

  property :id,           Serial
  property :manufacturer, String, :key => true
  property :model,        String, :key => true

  validates_uniqueness_of :
end

4 个答案:

答案 0 :(得分:5)

你实际上可以选择:

class Tvs
  include DataMapper::Resource

  property :id,           Serial
  property :manufacturer, String, :unique_index => :manufacturer_model
  property :model,        String, :unique_index => :manufacturer_model

  validates_uniqueness_of :model, :scope => :manufacturer
end

这也将为您提供数据库中的唯一索引。

答案 1 :(得分:0)

没关系。 这似乎完成了这项工作:

class Tvs
  include DataMapper::Resource

  property :id,           Serial
  property :manufacturer, String, :unique_index => true
  property :model,        String, :unique_index => true

  validates_uniqueness_of :model, :scope => :manufacturer
end

答案 2 :(得分:0)

class Tvs
  include DataMapper::Resource

  property :id,           Serial
  property :manufacturer, String, :unique_index => :manufacturer_model
  property :model,        String, :unique_index => :manufacturer_model

  validates_is_unique :model, :scope => :manufacturer
end

我需要修改示例以使用“validates_is_unique”来使其工作。

答案 3 :(得分:0)

如果删除property :id Serial行,最终会得到一个复合键(制造商,型号),不会允许特定制造商使用重复的模型。