我正在寻找一个可以验证复合验证唯一性的测试(如果这样做有意义的话)。验证本身如下:
validates_uniqueness_of:name,:scope => [:address_postcode]
我该怎么做?我是否只是尝试创建两个具有相同名称的地方并尝试验证?例如(并且此代码不起作用)
test "name and postcode of a new place must be unique" do
place = Place.new(description: "my favourite chinese", cuisine:"chinese",
address_state:"NSW", address_country:"Australia", address_postcode:"2209")
place.name = "Masthai"
assert place.valid?
place2 = Place.new(description: "try a second restaurant", cuisine:"chinese",
address_state:"NSW", address_country:"Australia", address_postcode:"2209")
place2.name = "Masthai"
assert place2.invalid?
end
答案 0 :(得分:2)
place2
可能有效,因为您没有将place
保存到数据库中。我会试试这个:
test "name and postcode of a new place must be unique" do
place = Place.create(description: "my favourite chinese", cuisine:"chinese",
address_state:"NSW", address_country:"Australia", address_postcode:"2209")
place.name = "Masthai"
assert place.valid?
place2 = Place.new(description: "try a second restaurant", cuisine:"chinese",
address_state:"NSW", address_country:"Australia", address_postcode:"2209")
place2.name = "Masthai"
assert place2.invalid?
end
另外,我想提供格式/风格的建议:
test "name and postcode of a new place must be unique" do
place = Place.create(
description: "my favourite chinese",
cuisine: "chinese",
address_state: "NSW",
address_country: "Australia",
address_postcode: "2209",
name: "Masthai"
)
assert place.valid?
place2 = Place.new(
description: "try a second restaurant",
cuisine: "chinese",
address_state: "NSW",
address_country: "Australia",
address_postcode: "2209",
name: "Masthai"
)
assert place2.invalid?
end
另外,我建议你阅读一些关于数据库规范化的内容。您应该为cuisine
,state
和country
设置单独的表格,而不是将这些值存储为自由格式文本。