Ruby on rails 两字段组合的唯一性
我有一个a,b区域的模型。我想确保a和b的组合在表中是唯一的,因此a=1,b=2和a=2,b=1会引起冲突 我尝试了Ruby on rails 两字段组合的唯一性,ruby-on-rails,Ruby On Rails,我有一个a,b区域的模型。我想确保a和b的组合在表中是唯一的,因此a=1,b=2和a=2,b=1会引起冲突 我尝试了验证:a,:scope=>:b的唯一性,但它只确保没有两个 a=1,b=2行可以存在,我还想过滤掉a=2,b=1。谢谢您可能想看看 据我所知,内置的唯一性验证器不支持这一点。您必须为此编写自定义验证,例如: class MyModel < AR::Base validate :my_custom_validation def my_custom_validatio
验证:a,:scope=>:b的唯一性,但它只确保没有两个
a=1,b=2行可以存在,我还想过滤掉a=2,b=1。谢谢您可能想看看
据我所知,内置的唯一性验证器不支持这一点。您必须为此编写自定义验证,例如:
class MyModel < AR::Base
validate :my_custom_validation
def my_custom_validation
if self.class.where("(a = :a AND b = :b) OR (a = :b AND b = :a)", {:a => a, :b => b}).exists?
errors.add(:a, :taken)
end
end
end
classmymodela,:b=>b})存在?
错误。添加(:a,:take)
结束
结束
结束
如果有任何记录具有(a=1和b=2)或(a=2和b=1),这将在属性a
中添加一个验证错误。我想说的是,这是不受开箱即用支持的。您应该只构建自己的验证方法。没有提到a
和b
是主键,因此可以声明一个唯一的键约束,以将此验证保留在数据库端。而且,这仍然可以像内置验证一样工作,而不是像yngum希望的那样。它仍然允许两行,其中一行a=1,b=2,另一行a=2,b=1