У меня есть следующая таблица соединения:
class ContactFormUsership < ApplicationRecord
belongs_to :user
belongs_to :contact_form
validates :user_id, presence: true, uniqueness: { scope: :contact_form_id }
end
Это гарантирует, что при создании строки не будет дублированных пар user
/ contact_form
.
У меня также есть индексы для этой таблицы, чтобы обеспечить уникальность на уровне БД:
t.index ["user_id", "contact_form_id"], name: "index_contact_form_userships_on_user_id_and_contact_form_id", unique: true
У меня есть регрессионный тест, который выглядит так:
test 'An error is raised if a user is added to a form more than once' do
contact_form = ContactForm.create
user = users(:user_1)
assert_raises(ActiveRecord::RecordInvalid) do
2.times do
contact_form.users << user
end
end
end
Но это не проверяет, что невозможно создать повторяющиеся строки на уровне БД. Он только проверяет проверки.
Как мне проверить уникальность на уровне БД? Есть ли способ <<
без проверок?