【问题标题】:Validate uniqueness on combined fields in DataMapper验证 DataMapper 中组合字段的唯一性
【发布时间】:2011-05-01 20:00:21
【问题描述】:

我希望能够将条目放入我的数据库中,其中制造商将被多次表示,但制造商和型号的组合不同。 所以 "Sony(manufacturer), Tv(model)" 可以 "Sony(manufacturer), OtherTv(model)" 但第三个条目 "Sony(manufacturer), Tv(model)" 不行,因为制造商和型号的组合不是唯一的。我尝试了: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

【问题讨论】:

    标签: ruby validation sinatra datamapper


    【解决方案1】:

    没关系。 看来这完成了工作:

    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】:

      你实际上可以选择:

      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
      

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

      【讨论】:

      • 酷。谢谢。所以这会给我一个名为manufacturer_model的数据库中的新列还是什么?
      • 不是列,而是唯一索引。称为unique_tvs_manufacturer_model 或类似的名称并在两列中。
      【解决方案3】:
      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”来使其工作。

      【讨论】:

        【解决方案4】:

        如果您删除 property :id Serial 行,您将得到一个复合键 (Manufacturer, Model),这将不允许特定制造商的重复模型。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-01-04
          • 1970-01-01
          • 2019-07-12
          • 2019-11-15
          • 1970-01-01
          • 1970-01-01
          • 2010-11-25
          • 2011-08-07
          相关资源
          最近更新 更多