数据输入上多列的唯一性

时间:2015-04-09 15:31:57

标签: ruby-on-rails sqlite ruby-on-rails-4

我正在尝试验证我输入的数据的唯一性,因此根本没有重复。

模型

 class Asset < ActiveRecord::Base
      validates :Devtype, presence: true
      validates_uniqueness_of :Nic1mac, :scope => [:Nic1mac, :Nic2mac, :Nic3mac, :IBmac, :SN], :allow_blank => true
      validates_uniqueness_of :Nic2mac, :scope => [:Nic1mac, :Nic2mac, :Nic3mac, :IBmac, :SN], :allow_blank => true
      validates_uniqueness_of :Nic3mac, :scope => [:Nic1mac, :Nic2mac, :Nic3mac, :IBmac, :SN], :allow_blank => true
      validates_uniqueness_of :IBmac, :scope => [:Nic1mac, :Nic2mac, :Nic3mac, :IBmac, :SN], :allow_blank => true
      validates_uniqueness_of :SN, :scope => [:Nic1mac, :Nic2mac, :Nic3mac, :IBmac, :SN], :allow_blank => true
    end

这是我在类似问题中看到的推荐,但它对我不起作用。我在“Nic1mac”字段中输入了我的第一个数据。当我创建另一个条目并尝试使用相同的数据填充“Nic1mac”字段时,它会按预期停止。但是当我使用“Nic1mac”字段中的相同数据填充“Nic2mac”字段时,它允许创建记录而没有任何错误。因此,我在不同的字段中有一个重复的mac地址。另一个问题是,如果我创建一个新记录并在“Nic1mac”和“Nic2mac”中输入相同的数据,它允许创建记录而不会注意到“Nic1mac”中的数据在另一个记录中是相同的。

示例

记录一个 -

Nic1mac = 1234

记录二 -

Nic2mac = 1234(即使数据与记录1 Nic1mac中的数据相同,也不显示错误并允许创建记录)

记录三 -

Nic1mac = 1234(错误按预期出现)

Nic2mac = 1234(即使数据与记录1和2相同,也允许创建记录)

我还想防止在记录创建步骤中输入重复数据。

示例

记录一个创作 -

Nic1mac = 1234

Nic2mac = 1234

我希望出现一个不允许我创建记录的错误,因为重复的数据被输入到两个不同的字段中。如果需要更清晰或更多信息或代码,请告诉我,我会尽力提供。

1 个答案:

答案 0 :(得分:0)

您可以将所有Mac存储在不同的Mac类(只有一个)中,因此您必须验证一列的唯一性:

class Asset < ActiveRecord::Base
  has_one :Nic1mac, class_name: 'Mac'
  has_one :Nic2mac, class_name: 'Mac'
  has_one :Nic3mac, class_name: 'Mac'
end

Class Mac < ActiveRecord::Base
  belongs_to :asset
  validates_uniqueness_of :mac_addr
end