В моем приложении Rails я пытаюсь сохранить MAC-адреса для устройств, принадлежащих разным пользователям.Каждый MAC-адрес должен быть уникальным, поэтому я включил проверку уникальности.Кажется, что сама проверка работает, поскольку дубликаты записей были отклонены, когда я попытался использовать консоль Rails (ActiveRecord::RecordNotUnique
).Тем не менее, мой тест, чтобы проверить, что могут быть сохранены только уникальные записи, не проходит.
Поэтому мои вопросы:
- Почему мой тест не пройден и как я могу это исправить?
- Я читал в другом месте, что только проверка уникальности не является надежным способом обеспечения уникальности.Должен ли я использовать другие методы, такие как
before_save
обратные вызовы?
Это сообщение об ошибке, которое я получаю для теста:
Expected #<MacAddress id: nil, user_id: nil, address: "MACADD123", created_at: nil, updated_at: nil> to be nil or false
Настройка в файлах моей модели:
# app/models/mac_address.rb
class MacAddress < ApplicationRecord
validates :address, uniqueness: true
belongs_to :user
end
# app/models/user.rb
class User < ApplicationRecord
has_many :mac_addresses, dependent: :destroy
end
Тест для проверки уникальности:
class MacAddressTest < ActiveSupport::TestCase
test 'mac address must be unique' do
new_mac = 'MACADD123'
assert MacAddress.create(user: User.first, address: new_mac)
assert MacAddress.all.pluck(:address).include?(new_mac)
# The 'assert_not' below is failing.
assert_not MacAddress.create(user: User.second, address: new_mac)
end
end
Спасибо за любую помощь заранее.