0

我正在寻找可以验证复合验证的唯一性的测试(如果有意义的话)。验证本身如下:

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
4

1 回答 1

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

另外,我建议您阅读一些有关数据库规范化的内容。您真的应该为 , 和 提供单独的表格cuisinestatecountry不是将这些值存储为自由格式的文本。

于 2012-10-24T19:51:43.850 回答