【发布时间】:2014-11-28 14:59:39
【问题描述】:
我有一个包含三个字段的模型:
- url1
- url2
- url3
我想防止用户在多个字段中使用相同的值。我不想针对其他记录或范围验证唯一性,仅在当前记录内。
失败的测试如下所示:
expect(build(:post, url1: "foo", url2: "foo").to_not be_valid
activerecord 是否为这种情况提供验证,还是我应该自己编写?
编辑:
按照 Nermin 的建议,我创建了自己的验证器。我需要添加一些逻辑,因为我允许字符串为空白,但显然我不希望空白与返回误报相比。
validate :unique_urls_on_post
def unique_urls_on_post
#avoid duplicate url but still allow blank
my_array = []
[iurl1, url2, url3].each do |i|
my_array << i unless i.length < 1 #empty string don't go in the array
end
unless my_array.uniq.length == my_array.count
errors.add(:url1, "has to be unique")
errors.add(:url2, "has to be unique")
errors.add(:url3, "has to be unique")
false
end
end
【问题讨论】:
标签: ruby-on-rails activerecord