Ruby on rails 数据输入时多列的唯一性

Ruby on rails 数据输入时多列的唯一性,ruby-on-rails,sqlite,ruby-on-rails-4,Ruby On Rails,Sqlite,Ruby On Rails 4,我正在尝试验证我输入的数据的唯一性,以便根本不存在重复数据 模型 这是我在类似问题中看到的建议,但对我不起作用。我在Nic1mac字段中输入了我的第一个数据。当我创建另一个条目并尝试用相同的数据填充Nic1mac字段时,它会像预期的那样阻止我。但是,当我用Nic1mac字段中相同的数据填充Nic2mac字段时,它允许创建记录而不会出现任何错误。因此,我在不同的字段中有一个重复的mac地址。另一个问题是,如果我创建一个新记录,并在Nic1mac和Nic2mac中输入相同的数据,则允许创建该记录,而

我正在尝试验证我输入的数据的唯一性,以便根本不存在重复数据

模型

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

范例

记录一-

Nic1mac=1234

记录二-

Nic2mac=1234未显示任何错误,即使数据与记录1 Nic1mac中的数据相同,也允许创建记录

记录三-

Nic1mac=1234错误按预期出现

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

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

范例

记录一个创作-

Nic1mac=1234

Nic2mac=1234


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

您可以将所有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

为什么需要写5次语句的validates\u university\u?您使用的是相同的属性,所以我认为您只需要一次。我希望每个字段都与其他字段进行验证,这样就不会有数据复制。这就是为什么我有5次。如果有别的方法,或者我做错了,我会洗耳恭听。是你做的。scope做的事情与您预期的稍有不同。它不比较列之间的值。它验证来自所有列的值组合的唯一性。我觉得我还不够清楚,但这里有一个很好的例子:通过创建这个类,我还必须为它创建自己的模型、视图和控制器?还是只需要对我的资产模型、视图和控制器进行调整@您肯定需要创建一个新模型,因为模型意味着存储数据的数据库表。您可以不做任何其他事情,只需修改资产的模型和控制器。阅读以下内容可能会有所帮助:@aealvarez3
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