Учитывая простые отношения, в которых Person has_many Телефоны. А телефон содержит только номер телефона, который должен быть уникальным!
class Telephone < ActiveRecord::Base
validates_presence_of :contact_id
belongs_to :contact
validates :telephone, {:presence => true, :uniqueness => true}
end
class Contact < ActiveRecord::Base
has_many :telephones
validates_associated :telephones
has_many :emails
has_many :addresses
validates_presence_of :firstname
accepts_nested_attributes_for :telephones, :allow_destroy=>true
validates_presence_of :lastname
end
test "telephone number must be unique" do
john = contacts :johndoe #johndoe is a person with 1 existing number
2.times do
john.telephones.build :telephone=> "123" # 123 doesnt exist yet
end
puts Telephone.count # this gives 1
john.save
puts Telephone.count # this gives 3 !!!! ???
assert not(john.valid?) # This validates unless I remove the save above
end
Может ли кто-нибудь объяснить результаты этого теста.
- просто вызов действительный? не удается, но это упоминается в rdoc (необходимо сначала сохранить)
- сохранение первым делает действительным? передать
НО теперь у меня фактически есть 3 записи в базе данных, что нарушает мое уникальное требование.
Есть ли лучший способ сделать это? Я не понимаю результат этого теста, он действительно противоречит моим ожиданиям.