Rails 앱에서 다른 사용자에게 속한 장치의 MAC 주소를 저장하려고합니다. 각 MAC 주소는 고유해야하므로 고유성 유효성 검사를 포함했습니다. Rails Console ( 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
미리 도움을 주셔서 감사합니다.
에 대한 문서에 따라create
:
id
해당 레코드 가 없습니다 . 그것은 지속되지 않았습니다. .errors.full_messages
고유성 유효성 검사 실패를 보려면 로 오류를 확인하십시오 .
결과 개체는 개체가 데이터베이스에 성공적으로 저장되었는지 여부에 관계없이 반환됩니다.
다음과 같이 저장되었다고 주장해야합니다.
mac_address = MacAddress.create(...)
assert !mac_address.new_record?
그것이 저장되었는지 여부를 알려줍니다. 또는 당신이 사용할 수있는 create!
인상되는 ActiveRecord::RecordInvalid
실패한 경우.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다